提供数据
rows = [
{'x': 1, 'y': 2, 'z': 3},
{'x': 2, 'y': 2, 'z': 3},
]
如果我尝试构建这样的数据框
frame = pd.DataFrame.from_records(rows, index='x')
它工作正常。但是,
frame = pd.DataFrame.from_records(rows, index='x', columns=['y', 'z'])
(我希望这等效)失败,并出现奇怪的错误:KeyError: 'x'
。怎么了?
答案 0 :(得分:5)
将x
添加到您的columns
:
df = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
答案 1 :(得分:3)
您需要在列中包含x
。例如:
rows = [{'x': 1, 'y': 2, 'z': 3}, {'x': 2, 'y': 2, 'z': 3}]
frame = pd.DataFrame.from_records(rows, index='x')
display(frame)
y z
x
1 2 3
2 2 3
frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
display(frame)
y z
x
1 2 3
2 2 3
答案 2 :(得分:3)
使用:
import pandas as pd
rows = [
{'x': 1, 'y': 2, 'z': 3},
{'x': 2, 'y': 2, 'z': 3},
]
frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
print(frame)
输出:
y z
x
1 2 3
2 2 3
答案 3 :(得分:3)
columns
用作过滤器,在处理index
参数之前 。因此,您会看到KeyError
,因为熊猫在过滤x
之后找不到['y', 'z']
。一种解决方案是在将数据读入数据帧后reindex
:
frame = pd.DataFrame.from_records(rows, index='x').reindex(columns=['y', 'z'])
或者,您可以指定所有字段,包括索引:
frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
这样做的好处是不会读取不需要的字段,并且不会在后续步骤中进行过滤。