Python 3.6.8中Pandas的replace方法无法替换值问题求助
Pandas替换单元格子字符串失效的问题解决
嘿,我来帮你排查这个问题!你发现replace方法没把单元格里的:)替换成目标字符串,核心原因是Pandas的replace方法默认是全匹配模式——它只会替换那些和字典键完全一致的整个单元格内容,而不是单元格里的子字符串。
你的目标是替换单元格内的子串":)",但原单元格内容是一整句话,自然不会触发全匹配替换,所以看起来没生效。
解决方案:开启正则替换模式
有两种简单的修改方式,都能实现子串替换:
方法1:针对字符串列使用str.replace
直接对tweet列调用字符串方法str.replace,并传入字典和regex=True参数(开启正则匹配,这样就能识别子串):
import pandas as pd INPUT_FILE = "input.csv" df = pd.read_csv(INPUT_FILE, error_bad_lines=False, engine='python') print(df.columns) print ("Before: ", df['tweet'].loc[432]) dic = {":-": "happy-smiley", ":)": "happy-smiley", ":-(": "sad-smiley", ":(": "sad-smiley"} # 修改这里:用str.replace并开启regex df['tweet'] = df['tweet'].replace(dic, regex=True) print ("After: ", df['tweet'].loc[432])
方法2:给df.replace添加regex=True参数
如果你想保留原来的df.replace写法,只需要加上regex=True参数,告诉Pandas要做子串匹配:
df.replace({'tweet': dic}, regex=True, inplace=True)
效果验证
修改后,你会看到输出的After内容里,:)已经被替换成happy-smiley了:
After: Are you ready for climate change, if so let your lawmakers know, how tell them sign petitions, drop a hint happy-smiley
内容的提问来源于stack exchange,提问作者user3668129
相关产品推荐
相关产品推荐

