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

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有很多注意事项,不要让其他开发人员为了阅读你的代码而不得不成为所有这些方面的专家。

其他回答

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

错误信息“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数据帧:

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

你可以试试:

df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')

来自'orient'参数的文档:如果传递的dict的键应该是结果DataFrame的列,则传递' columns '(默认)。否则,如果键应该是行,则传递' index '。

只要把字典放在一个列表上:

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

我尝试了转置(),它工作。 缺点:您创建了一个新对象。

testdict1 = {'key1':'val1','key2':'val2','key3':'val3','key4':'val4'}

df = pd.DataFrame.from_dict(data=testdict1,orient='index')
print(df)
print(f'ID for DataFrame before Transpose: {id(df)}\n')

df = df.transpose()
print(df)
print(f'ID for DataFrame after Transpose: {id(df)}')

输出

         0
key1  val1
key2  val2
key3  val3
key4  val4
ID for DataFrame before Transpose: 1932797100424

   key1  key2  key3  key4
0  val1  val2  val3  val4
ID for DataFrame after Transpose: 1932797125448

​```