这可能是一个简单的问题,但我不知道该怎么做。假设有两个变量。

a = 2
b = 3

我想从这个构建一个数据框架:

df2 = pd.DataFrame({'A':a,'B':b})

这会产生一个错误:

ValueError:如果使用所有标量值,则必须传递一个索引

我也试过这个:

df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()

这将给出相同的错误消息。


当前回答

也许Series会提供你需要的所有函数:

pd.Series({'A':a,'B':b})

DataFrame可以被认为是一个系列的集合,因此你可以:

将多个Series连接到一个数据帧中(如此处所述) 向现有数据帧中添加一个Series变量(示例如下)

其他回答

将“a”和“b”值更改为列表,如下所示:

a = [2]
b = [3]

然后执行如下代码:

df2 = pd.DataFrame({'A':a,'B':b})
df2

你会得到:

    A   B
0   2   3

将字典转换为数据帧

col_dict_df = pd.Series(col_dict).to_frame('new_col').reset_index()

为列指定新名称

col_dict_df.columns = ['col1', 'col2']

你也可以使用pd.DataFrame.from_records,这在你已经有字典的情况下更方便:

df = pd.DataFrame.from_records([{ 'A':a,'B':b }])

你也可以设置索引,如果你想,通过:

df = pd.DataFrame.from_records([{ 'A':a,'B':b }], index='A')

熊猫在施展魔法。所有的逻辑都是错误的。

错误信息“ValueError:如果使用所有标量值,您必须传递一个索引”表示您必须传递一个索引。

这并不一定意味着传递一个索引就能让熊猫做你想让它做的事情

当你传递一个索引时,pandas会把你的字典键当作列名,把值当作索引中每个值的列应该包含的值。

a = 2
b = 3
df2 = pd.DataFrame({'A':a,'B':b}, index=[1])

    A   B
1   2   3

传递一个较大的索引:

df2 = pd.DataFrame({'A':a,'B':b}, index=[1, 2, 3, 4])

    A   B
1   2   3
2   2   3
3   2   3
4   2   3

索引通常是由数据帧自动生成的。然而,熊猫不知道你想要多少行2和3。但是你可以更明确地表达出来

df2 = pd.DataFrame({'A':[a]*4,'B':[b]*4})
df2

    A   B
0   2   3
1   2   3
2   2   3
3   2   3

默认的索引是0。

我建议在创建dataframe时,始终将列表字典传递给dataframe构造函数。对于其他开发人员来说,它更容易阅读。Pandas有很多注意事项,不要让其他开发人员为了阅读你的代码而不得不成为所有这些方面的专家。

你需要提供可迭代对象作为Pandas DataFrame列的值:

df2 = pd.DataFrame({'A':[a],'B':[b]})