数据框KeyError,尽管存在

时间:2019-01-29 13:07:41

标签: python pandas dataframe

提供数据

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'。怎么了?

4 个答案:

答案 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'])

这样做的好处是不会读取不需要的字段,并且不会在后续步骤中进行过滤。