【问题标题】:Trying to update a dataframe尝试更新数据框
【发布时间】:2017-08-26 23:21:45
【问题描述】:

我有一个数据框 (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

但是当我打印出数据框时,它保持不变。

我做错了什么?

【问题讨论】:

  • iterrows() 只返回一个生成器,index,row 是两个值。您要更新什么值? (df[index]['3']应该代表哪一行哪一列?)
  • 您确定您的列名是字符串 ('3') 而不是整数?当您尝试访问该列时,这可能会导致混乱。如果有疑问,请查看您从 print(df.columns) 中得到什么。

标签: python pandas


【解决方案1】:

您不能通过这样的迭代来修改数据框。 See here.

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

df[1, 3] = 1

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

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

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

【讨论】:

    【解决方案2】:

    将最后一行替换为:

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

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

    【讨论】:

    • 谢谢亚历克斯,如果我稍微修改一下 df.at[index,3] = 1 它会很有魅力
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 2019-12-13
        • 1970-01-01
        相关资源
        最近更新 更多