You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

原尝试问题分析

  1. 第一个代码仅生成替换后的Series但未赋值回原DataFrame,因此原数据无变化:
    df.loc[df['nights'] == 2, 'rate'].str.replace('\.','\|')  # 未赋值,无效
    
  2. 第二个代码存在语法错误,错误地在布尔索引后直接调用str.replace,正确逻辑应先筛选目标行再执行替换:
    # 语法错误,逻辑混乱
    df.loc[(df['nights'] == 2) & (~df['rate'].str.contains('\|')).str.replace('\.','\|')
    

内容的提问来源于stack exchange,提问作者Boomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:07:44