Pandas DataFrame按列条件替换字符问题求助
解决Pandas中按条件替换字符串的问题
需求说明
有一个包含nights和rate两列的Pandas DataFrame,需实现以下逻辑:
- 当
nights列值为2,且rate列值**不包含竖线(|)**时,将rate中的句号(.)替换为竖线(|) - 其余所有情况保持
rate列值不变
示例数据
原DataFrame:
import pandas as pd data = [[2, '10.10'], [3, '15|15'], [2, '14.14'],[4,'20|20.34|20|20.3'],[2,'30.30'],[3,'121.23|121.23|121.23']] df = pd.DataFrame(data, columns=['nights', 'rate'])
期望得到的结果:
data2 = [[2, '10|10'], [3, '15|15'], [2, '14|14'],[4,'20|20.34|20|20.3'],[2,'30|30'],[3,'121.23|121.23|121.23']] df2 = pd.DataFrame(data2, columns=['nights', 'rate'])
正确解决方案
# 构建布尔筛选条件:nights=2 且 rate不含竖线 mask = (df['nights'] == 2) & (~df['rate'].str.contains('\|', na=False)) # 对符合条件的行执行替换并赋值回原DataFrame df.loc[mask, 'rate'] = df.loc[mask, 'rate'].str.replace('\.', '|') # 验证结果 print(df)
原尝试问题分析
- 第一个代码仅生成替换后的Series但未赋值回原DataFrame,因此原数据无变化:
df.loc[df['nights'] == 2, 'rate'].str.replace('\.','\|') # 未赋值,无效 - 第二个代码存在语法错误,错误地在布尔索引后直接调用
str.replace,正确逻辑应先筛选目标行再执行替换:# 语法错误,逻辑混乱 df.loc[(df['nights'] == 2) & (~df['rate'].str.contains('\|')).str.replace('\.','\|')
内容的提问来源于stack exchange,提问作者Boomer
相关产品推荐
相关产品推荐

