首页 > 解决方案 > 替换字符串熊猫中的字母

问题描述

我有这个数据框:

import pandas as pd

columns = ['ID','Data']
data = [['26A20',123],
        ['12A20',123],
        ['23A20',123]]
df = pd.DataFrame.from_records(data=data, columns=columns)

>>df
      ID  Data
0  26A20   123
1  12A20   123
2  23A20   123

还有一个简单的任务,当 ID 以 26 或 23 开头时,从 ID 中删除 A:s:

df.loc[df['ID'].str.startswith(('23','26'))]['ID'] = df['ID'].str.replace('A','')

SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值。尝试改用 .loc[row_indexer,col_indexer] = value

没有任何变化:

>>df
      ID  Data
0  26A20   123
1  12A20   123
2  23A20   123

我正在使用 loc,我做错了什么?

标签: pandas

解决方案


删除 double][以避免链式分配

df.loc[df['ID'].str.startswith(('23','26')), 'ID'] = df['ID'].str.replace('A','')
print (df)
      ID  Data
0   2620   123
1  12A20   123
2   2320   123

也可以在两侧过滤以减少功能的执行replace

mask = df['ID'].str.startswith(('23','26'))
df.loc[mask, 'ID'] = df.loc[mask, 'ID'].str.replace('A','')
print (df)
      ID  Data
0   2620   123
1  12A20   123
2   2320   123

推荐阅读