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

a = 2
b = 3

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

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

这会产生一个错误:

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

我也试过这个:

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

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


当前回答

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

错误信息“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]})

你可以试着把你的字典包装成一个列表:

my_dict = {'A':1,'B':2}
pd.DataFrame([my_dict])
   A  B
0  1  2

最简单的选项ls:

dict  = {'A':a,'B':b}
df = pd.DataFrame(dict, index = np.arange(1) )

你可以试试这个: df2 = pd.DataFrame.from_dict ({a: a、b: b},东方=“指数”)

如果你有一个字典,你可以用下面这行代码把它转换成pandas数据帧:

pd.DataFrame({"key": d.keys(), "value": d.values()})