这可能是一个简单的问题,但是我不知道该怎么做。可以说我有两个变量,如下所示。
a = 2
b = 3
我想从中构造一个DataFrame:
df2 = pd.DataFrame({'A':a,'B':b})
这会产生一个错误:
ValueError:如果使用所有标量值,则必须传递索引
我也尝试过这个:
df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()
这给出了相同的错误消息。
这可能是一个简单的问题,但是我不知道该怎么做。可以说我有两个变量,如下所示。
a = 2
b = 3
我想从中构造一个DataFrame:
df2 = pd.DataFrame({'A':a,'B':b})
这会产生一个错误:
ValueError:如果使用所有标量值,则必须传递索引
我也尝试过这个:
df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()
这给出了相同的错误消息。
Answers:
错误消息指出,如果要传递标量值,则必须传递索引。因此,您不能对列使用标量值-例如,使用列表:
>>> df = pd.DataFrame({'A': [a], 'B': [b]})
>>> df
A B
0 2 3
或使用标量值并传递索引:
>>> df = pd.DataFrame({'A': a, 'B': b}, index=[0])
>>> df
A B
0 2 3
index=0
,但这可能导致意外使用(认为单个字典可以以某种方式创建多行数据帧)
pd.DataFrame.from_records
当您已经有了字典时,也可以使用以下方法更方便:
df = pd.DataFrame.from_records([{ 'A':a,'B':b }])
您还可以根据需要通过以下方式设置索引:
df = pd.DataFrame.from_records([{ 'A':a,'B':b }], index='A')
您需要首先创建一个熊猫系列。第二步是将熊猫系列转换为熊猫数据框。
import pandas as pd
data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()
您甚至可以提供列名。
pd.Series(data).to_frame('ColumnName')
pd.Series(data).to_frame('ColumnName')
较短,尽管这种等效也许更直接:pd.DataFrame.from_dict(data, orient='index', columns=['ColumnName'])
如果要转换标量字典,则必须包含一个索引:
import pandas as pd
alphabets = {'A': 'a', 'B': 'b'}
index = [0]
alphabets_df = pd.DataFrame(alphabets, index=index)
print(alphabets_df)
尽管列表字典不需要索引,但是可以将相同的概念扩展为列表字典:
planets = {'planet': ['earth', 'mars', 'jupiter'], 'length_of_day': ['1', '1.03', '0.414']}
index = [0, 1, 2]
planets_df = pd.DataFrame(planets, index=index)
print(planets_df)
当然,对于列表字典,您可以构建不带索引的数据框:
planets_df = pd.DataFrame(planets)
print(planets_df)
熊猫魔术在工作。一切逻辑都搞定了。
错误消息"ValueError: If using all scalar values, you must pass an index"
说您必须传递索引。
这并不一定意味着传递索引会使熊猫按照自己的意愿去做
传递索引时,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的。
我建议在创建数据框时始终将列表字典传递给数据框构造函数。对于其他开发人员来说更容易阅读。Pandas有很多警告,不要让其他开发人员必须要拥有所有这些方面的专家才能阅读您的代码。
如果您有字典,则可以使用以下代码将其转换为熊猫数据框:
pd.DataFrame({"key": d.keys(), "value": d.values()})
只需将字典传递给列表即可:
a = 2
b = 3
df2 = pd.DataFrame([{'A':a,'B':b}])