升级pandas至0.23.0后执行str.replace报TypeError问题求助
解决pandas 0.23.0中str.replace触发TypeError的问题
这个问题我之前也碰到过,是pandas 0.23.0和Python 3.5之间的兼容性bug导致的。核心原因是:pandas的is_re函数里用了isinstance(obj, re_type)判断是否为正则对象,但Python 3.5的typing模块不允许对类型别名使用isinstance,直接触发了TypeError: Type aliases cannot be used with isinstance().
给你两个可行的解决办法:
方法一:升级pandas到修复版本
这个bug在pandas 0.23.1及后续版本已经被修复,直接升级是最省心的方案,执行以下命令:
pip install --upgrade pandas>=0.23.1
升级后再运行你的str.replace代码就不会有问题了。
方法二:不升级pandas的替代写法
如果因为环境限制没法升级pandas,可以换一种方式处理列中的空白字符:
- 使用
apply方法遍历处理:
df['any_column'] = df['any_column'].apply(lambda x: x.replace(' ', '') if isinstance(x, str) else x)
- 或者预先编译正则表达式,绕开类型检查问题:
import re space_pattern = re.compile(' ') df['any_column'] = df['any_column'].str.replace(space_pattern, '')
附你遇到的报错信息:
/usr/local/lib/python3.5/dist-packages/pandas/core/strings.py in replace(self, pat, repl, n, case, flags, regex) 2427 def replace(self, pat, repl, n=-1, case=None, flags=0, regex=True): 2428 result = str_replace(self._data, pat, repl, n=n, case=case, -> 2429 flags=flags, regex=regex) 2430 return self._wrap_result(result) 2431 /usr/local/lib/python3.5/dist-packages/pandas/core/strings.py in str_replace(arr, pat, repl, n, case, flags, regex) 637 raise TypeError("repl must be a string or callable") 638 --> 639 is_compiled_re = is_re(pat) 640 if regex: 641 if is_compiled_re: /usr/local/lib/python3.5/dist-packages/pandas/core/dtypes/inference.py in is_re(obj) 217 """ 218 --> 219 return isinstance(obj, re_type) 220 221 /usr/lib/python3.5/typing.py in __instancecheck__(self, obj) 258 259 def __instancecheck__(self, obj): --> 260 raise TypeError("Type aliases cannot be used with isinstance().") 261 262 def __subclasscheck__(self, cls): TypeError: Type aliases cannot be used with isinstance().
内容的提问来源于stack exchange,提问作者aerin
相关产品推荐
相关产品推荐

