我正在尝试更改Pandas数据框中每个单元格的值。期待.loc
允许我识别具有范例df.loc[row_index, column_name] = cell value
的单元格,我使用了以下循环:
table["field"] = 6 #placehodler value used only to create the column
for field, index in enumerate(table["field"]): table.loc[index,
"field"] = table.loc[index, "field_x"] if math.isnan(table.loc[index,
"field_y"]) else table.loc[index, "field_y"]
但是,我收到以下错误:KeyError: 'the label [6] is not in the [index]'
。通过索引选择值的正确语法是什么?
答案 0 :(得分:3)
您不应该使用enumerate
来生成索引和列值,您应该使用iterrows
。
使用示例:
In [6]:
df = pd.DataFrame({'a':np.arange(5), 'b':np.random.randn(5)})
df
Out[6]:
a b
0 0 -0.579585
1 1 -0.582196
2 2 -0.367147
3 3 -0.363332
4 4 0.880826
In [9]:
for index, row in df.iterrows():
print('index: ', index)
print('row: ', row)
输出:
index: 0
row: a 0.000000
b -0.579585
Name: 0, dtype: float64
index: 1
row: a 1.000000
b -0.582196
Name: 1, dtype: float64
index: 2
row: a 2.000000
b -0.367147
Name: 2, dtype: float64
index: 3
row: a 3.000000
b -0.363332
Name: 3, dtype: float64
index: 4
row: a 4.000000
b 0.880826
Name: 4, dtype: float64
这将允许您使用df.loc[index]
访问特定行,如果您需要可以使用上述row.index
循环中的for
访问的列