Python:替换含特定字符串列的值时赋值报错,如何解决?
动态匹配DataFrame列名并替换赋值问题
问题背景
需要找到名称包含year/month/day的DataFrame列,替换其值后重新赋值给该列。直接使用列筛选表达式赋值时触发语法错误,但硬编码具体列名时运行正常,希望实现无需写死列名的动态赋值。
错误代码与报错信息
错误代码:
df[df.columns[df.columns.str.contains('year/month/day')]].squeeze()=df[df.columns[df.columns.str.contains('year/month/day')]].squeeze().str.replace('year','-').str.replace('month','-').str.replace('day','') print(df)
报错信息:
SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='?
可行解决方法
方法1:先获取匹配列名再赋值(支持多列匹配)
先提取所有符合条件的列名,再直接对这些列进行赋值操作:
# 获取所有包含指定字符串的列名 target_cols = df.columns[df.columns.str.contains('year/month/day')] # 对匹配列执行替换并赋值 df[target_cols] = df[target_cols].squeeze().str.replace('year','-').str.replace('month','-').str.replace('day','')
方法2:单列场景下提取列名字符串赋值
如果确定只有一列符合条件,可以直接提取列名字符串后赋值:
# 获取目标列名(取第一个匹配的列) target_col = df.columns[df.columns.str.contains('year/month/day')][0] # 对该列执行替换并赋值 df[target_col] = df[target_col].str.replace('year','-').str.replace('month','-').str.replace('day','')
示例验证
输入DataFrame
import pandas as pd data = { 'birthday_year/month/day': ['2023year5month2day', '2019year6month29day'], 'name': ['Jack', 'Lauren'] } df = pd.DataFrame(data)
处理后输出
| birthday_year/month/day | name |
|---|---|
| 2023-5-2 | Jack |
| 2019-6-29 | Lauren |
内容的提问来源于stack exchange,提问作者Lara19
相关产品推荐
相关产品推荐

