pandas - 替换字符串熊猫中的字母
问题描述
我有这个数据框:
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,我做错了什么?
解决方案
删除 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
推荐阅读
- r - 使用 ifelse() 的 R 语法有什么问题?
- ios - xcode MKMapView 确实失败并出现错误:Error Domain=kCLErrorDomain Code=1 "(null)"
- python - 如何查找列表中所有产品的不同组合的总和(python)
- node.js - 我希望能够将 EJS 模板数据包含到局部视图中,并让它呈现在调用局部视图的所有页面上
- python - 命令与需要 () 与不需要的区别是什么?
- google-truth - 导致项目其余部分降级到 guava android 的真相扩展
- javascript - 如何在 Regexr 中不选择这个但其他任何东西?
- wordpress - 重力表单在提交时动态填充单选按钮为空
- c++ - C ++从字符串中的每个轴获取子字符串
- web-scraping - googlefinance中区块链eos的欧元和英镑符号是什么