【问题标题】:Pandas - Replace values based on indexPandas - 根据索引替换值
【发布时间】:2016-10-10 01:28:22
【问题描述】:

如果我像这样创建一个数据框:

import pandas as pd, numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=list('AB'))

例如,我如何将 A 列中的条目更改为第 0 -15 行的数字 16?换句话说,我如何完全基于索引替换单元格?

【问题讨论】:

    标签: python numpy pandas replace dataframe


    【解决方案1】:

    使用loc:

    df.loc[0:15,'A'] = 16
    print (df)
         A   B
    0   16  45
    1   16   5
    2   16  97
    3   16  58
    4   16  26
    5   16  87
    6   16  51
    7   16  17
    8   16  39
    9   16  73
    10  16  94
    11  16  69
    12  16  57
    13  16  24
    14  16  43
    15  16  77
    16  41   0
    17   3  21
    18   0  98
    19  45  39
    20  66  62
    21   8  53
    22  69  47
    23  48  53
    

    ix 的解决方案是deprecated

    【讨论】:

    • 这现在给出了一个 FutureWarning:不支持使用 .loc 对位置切片进行切片。 df.A.iloc[0:15] = 16 应该仍然有效。
    【解决方案2】:

    另一种解决方案是

    df.at[0:15, 'A']=16
    
    print(df.head(20))
    

    输出

         A   B
    0   16  44
    1   16  86
    2   16  97
    3   16  79
    4   16  94
    5   16  24
    6   16  88
    7   16  43
    8   16  64
    9   16  39
    10  16  84
    11  16  42
    12  16   8
    13  16  72
    14  16  23
    15  16  28
    16  18  11
    17  76  15
    18  12  38
    19  91   6
    

    【讨论】:

      【解决方案3】:

      除了其他答案之外,如果您有单个索引列表,您可以执行以下操作:

      indices = [0,1,3,6,10,15]
      df.loc[indices,'A'] = 16
      
      print(df.head(16))
      

      输出:

           A  B
      0   16  4
      1   16  4
      2    4  3
      3   16  4
      4    1  1
      5    3  0
      6   16  4
      7    2  1
      8    4  4
      9    3  4
      10  16  0
      11   3  1
      12   4  2
      13   2  2
      14   2  1
      15  16  1
      

      【讨论】:

        【解决方案4】:

        非常有趣的观察,下面的代码确实改变了原始数据帧中的值

        df.loc[0:15,'A'] = 16
        

        但如果你使用类似这样的代码

        df.loc[0:15]['A'] = 16
        

        它只会返回您数据帧的 副本,其值已更改,并且不会更改原始 df 对象中的值. 希望这将为处理此问题的人节省一些时间。

        【讨论】:

        【解决方案5】:

        您能否将该列的值更新为 -1.0 而不是 16?对我来说,它返回 255 而不是 -1.0。

        >>> effect_df.loc[3:5, ['city_SF', 'city_Seattle']] = -1.0
        
            Rent  city_SF  city_Seattle
        0  3999        1             0
        1  4000        1             0
        2  4001        1             0
        3  3499      255           255
        4  3500      255           255
        5  3501      255           255
        6  2499        0             1
        7  2500        0             1
        8  2501        0             1
        

        【讨论】:

          猜你喜欢
          • 2019-03-22
          • 1970-01-01
          • 2017-01-09
          • 1970-01-01
          • 2018-09-28
          • 2022-08-18
          • 2014-04-29
          • 2016-10-06
          • 2016-12-30
          相关资源
          最近更新 更多