【问题标题】:Replace specific column values in pandas dataframe [duplicate]替换熊猫数据框中的特定列值[重复]
【发布时间】:2020-04-25 03:31:47
【问题描述】:
df = pd.DataFrame({'Tissues':['a1','x2','y3','b','c1','v2','w3'], 'M':[1,2,'a',4,'b','a',7]})
df.set_index('Tissues')

数据框如下所示:

         M
Tissues   
a1       1
x2       2
y3       a
b        4
c1       b
v2       a
w3       7

如何将M 列中的所有as 替换为特定值2,并将所有bs 替换为3?

我试过了:

replace_values = {'a':2, 'b':3}
df['M'] = df['M'].map(replace_values)

,但这将不在replace_values 中的键中的其他值更改为NaN

  Tissues    M
0      a1  NaN
1      x2  NaN
2      y3  2.0
3       b  NaN
4      c1  3.0
5      v2  2.0
6      w3  NaN

我知道我可以做到

df.loc[(df['M'] == 'a')] = 2

但是我可以对 a、b 等有效地执行此操作,而不是一个一个地执行此操作吗?

【问题讨论】:

  • 您自己的解决方案非常好,只是错过了fillna,将最后一行替换为:df['M'] = df['M'].map(replace_values).fillna(df['M'])

标签: python pandas dataframe dictionary replace


【解决方案1】:

使用df.replace:

df = pd.DataFrame({'Tissues':['a1','x2','y3','b','c1','v2','w3'], 'M':[1,2,'a',4,'b','a',7]})
df.set_index('Tissues')

replace_values = {'a':2, 'b':3}

df['M'] = df['M'].replace(replace_values)

输出:

>>> df
  Tissues  M
0      a1  1
1      x2  2
2      y3  2
3       b  4
4      c1  3
5      v2  2
6      w3  7

【讨论】:

    【解决方案2】:

    通过添加fillna 来修复您的代码

    df['M'] = df['M'].map(replace_values).fillna(df.M)
    df
      Tissues    M
    0      a1  1.0
    1      x2  2.0
    2      y3  2.0
    3       b  4.0
    4      c1  3.0
    5      v2  2.0
    6      w3  7.0
    

    【讨论】:

      【解决方案3】:

      使用df.replace

      replace_values = {'a':2, 'b':3}
      df = df.replace({"M": replace_values})
      

      结果:

      Tissues  M
      0      a1  1
      1      x2  2
      2      y3  a
      3       b  4
      4      c1  b
      5      v2  a
      6      w3  7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        • 2022-06-24
        • 2022-01-11
        相关资源
        最近更新 更多