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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:55:04