Python 正在尝试更新数据帧

Python 正在尝试更新数据帧,python,pandas,Python,Pandas,我有一个数据帧(df),它看起来像: 0 1 2 3 0 BBG.apples.S BBG.XNGS.bananas.S 0 1 BBG.apples.S BBG.XNGS.oranges.S 0 2 BBG.apples.S BBG.XNGS.pairs.S 0 3 BBG.apples.S BBG.XNG

我有一个数据帧(df),它看起来像:

0   1                   2                       3
0   BBG.apples.S        BBG.XNGS.bananas.S      0
1   BBG.apples.S        BBG.XNGS.oranges.S      0
2   BBG.apples.S        BBG.XNGS.pairs.S        0
3   BBG.apples.S        BBG.XNGS.mango.S        0
4   BBG.apples.S        BBG.XNYS.mango.S        0
5   BBG.XNGS.bananas.S  BBG.XNGS.oranges.S      0
6   BBG.XNGS.bananas.S  BBG.XNGS.pairs.S        0
7   BBG.XNGS.bananas.S  BBG.XNGS.kiwi.S         0
8   BBG.XNGS.oranges.S  BBG.XNGS.pairs.S        0
9   BBG.XNGS.oranges.S  BBG.XNGS.kiwi.S         0
10  BBG.XNGS.peaches.S  BBG.XNGS.strawberrys.S  0
11  BBG.XNGS.peaches.S  BBG.XNGS.strawberrys.S  0
12  BBG.XNGS.peaches.S  BBG.XNGS.strawberrys.S  0
13  BBG.XNGS.peaches.S  BBG.XNGS.kiwi.S         0
我正在尝试使用以下方法更新数据帧中的值(第一行,第三列):

for index, row in df.iterrows():

        status = row[3]

        if int(status) == 0:

            df[index]['3'] = 1
但当我打印数据帧时,它保持不变


我做错了什么?

不能通过这样的迭代来修改数据帧

如果只想修改[1,3]处的元素,可以直接访问它:

df[1, 3] = 1
如果您试图将第3列中的每个
0
转换为
1
,请尝试以下操作:

df[df['3'] == 0] = 1

编辑:此外,用户会说您经常会得到一个副本,这就是操作失败的原因。

您不能通过这样的迭代来修改数据帧

如果只想修改[1,3]处的元素,可以直接访问它:

df[1, 3] = 1
如果您试图将第3列中的每个
0
转换为
1
,请尝试以下操作:

df[df['3'] == 0] = 1

编辑:此外,用户会说您经常会得到一份副本,这就是操作失败的原因。

将最后一行替换为:

df.at[index,'3'] = 1

显然,正如其他人提到的,最好使用矢量化表达式而不是迭代,尤其是对于大型数据帧。

将最后一行替换为:

df.at[index,'3'] = 1

显然,正如其他人提到的,最好使用矢量化表达式而不是迭代,尤其是对于大型数据帧。

如果您试图根据具有特定值的行更新所有行的第三列,如示例代码所示,然后在数据帧上使用
where
方法会更容易:

df.loc[:,'3'] = df['3'].where(df['3']!=0, 1)

如果您试图根据具有特定值的行来更新所有行的第三列,如示例代码所示,那么在数据帧上使用
where
方法会容易得多:

df.loc[:,'3'] = df['3'].where(df['3']!=0, 1)

尝试使用.loc或.iloc更新行(取决于您的需要)。
例如,在这种情况下:

if int(status) == 0:
    df.iloc[index]['3']='1'

尝试使用.loc或.iloc更新行(取决于您的需要)。
例如,在这种情况下:

if int(status) == 0:
    df.iloc[index]['3']='1'

iterrows()
只返回一个生成器,
索引,行
是两个值。您要更新什么值?(
df[index]['3']
应该表示哪一行和哪一列?)您确定列名是字符串(
'3'
)而不是整数吗?当您尝试访问该列时,这可能会造成混乱。如果有疑问,请查看从打印(df.columns)中获得的信息。
iterrows()
仅返回一个生成器,
索引,行
是两个值。您要更新什么值?(
df[index]['3']
应该表示哪一行和哪一列?)您确定列名是字符串(
'3'
)而不是整数吗?当您尝试访问该列时,这可能会造成混乱。如果有疑问,请查看您从打印(df.columns)中获得的信息。谢谢Alex,如果我稍微修改df.at[index,3]=1,它会产生一个字符Hanks Alex,如果我稍微修改df.at[index,3]=1,它会产生一个字符