迭代地更改Pandas数据帧的每列中的每个单元格

时间:2015-06-16 08:34:29

标签: python pandas dataframe

我正在尝试更改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]'。通过索引选择值的正确语法是什么?

1 个答案:

答案 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访问的列