在Pandas DataFrame中传递字符串变量值时结果异常的问题排查
解决DataFrame列操作中变量字符串传递的问题
看起来你在尝试用用户输入的动态值生成DataFrame列、匹配正则表达式时遇到了错误,核心问题出在字符串插值的方式不正确,导致变量没有被正确替换成实际值。我来帮你梳理问题并给出修正方案:
先看你代码里的几个明显问题:
- 输入代码有拼写错误:
input("ket 2: ")里的ket应该是key,虽然不影响功能,但会让输入提示显得不严谨 - 列名和正则里的变量未正确插值:你用
'{first_key}'这种写法,只是把字面量{first_key}作为列名,并没有替换成变量里的"Russia"这类实际值;正则表达式里的{first_key}同理,只是字符串字面量,没有被解析成变量值 - 冗余的布尔判断:
str.contains(...) == True完全可以简化,因为str.contains()本身就返回布尔类型的Series,不需要多此一举的判断
修正后的完整代码:
# 先修正输入提示的拼写错误 first_key = input("key 1: ") second_key = input("key 2: ") third_key = input("key 3: ") # 正确使用f-string实现变量插值 # 生成first_key对应的列 tweets[f"{first_key}"] = tweets['text'].str.contains(rf"^(?=.*\b{first_key}\b).*$", case=False) # 生成second_key对应的列 tweets[f"{second_key}"] = tweets['text'].str.contains(rf"^(?=.*\b{second_key}\b).*$", case=False) # 生成third_key对应的列 tweets[f"{third_key}"] = tweets['text'].str.contains(rf"^(?=.*\b{third_key}\b).*$", case=False)
关键改动说明:
- 动态列名生成:用
f"{first_key}"替代'{first_key}',f-string会自动把变量first_key的实际值替换进去,比如当first_key是"Russia"时,列名就变成"Russia" - 正则表达式的变量替换:用
rf""格式的字符串——r表示原始字符串(避免正则里的转义字符出问题),f表示f-string,这样正则里的{first_key}会被替换成变量的实际值,比如变成^(?=.*\bRussia\b).*$ - 简化布尔逻辑:去掉
== True,直接用str.contains()的返回结果赋值,代码更简洁且逻辑清晰
这样修改后,你的代码就能正确根据用户输入的关键词生成对应列,并且准确匹配文本中包含该关键词的记录了。
内容的提问来源于stack exchange,提问作者ambrish dhaka
相关产品推荐
相关产品推荐

