在pandas v0.17.1(anaconda python v3.4.3)中,datetime
上的替换功能被破坏。
我正在尝试用新值替换DataFrame
中的字符串值。此DataFrame
包含多个列(包括数据时间列)
replace函数失败
>>> from datetime import datetime
>>> import pandas as pd
>>> df = pd.DataFrame({'no':range(4), 'nm':list('abcd'), 'tm':datetime.now()})
>>> df.replace('a', 'A')
Traceback(最近一次调用最后一次):文件 “/home/xxx/anaconda/envs/py3/lib/python3.4/site-packages/pandas/core/internals.py” 第2061行,在_try_coerce_args中 other = other.astype('i8',copy = False).view('i8')ValueError:int()的无效文字,基数为10:'a'
在处理上述异常期间,发生了另一个异常:
Traceback(最近一次调用最后一次):文件 “/home/xxx/anaconda/envs/py3/lib/python3.4/site-packages/pandas/core/internals.py” 第594行,取而代之 values,_,to_replace,_ = self._try_coerce_args(self.values,to_replace)文件 “/home/xxx/anaconda/envs/py3/lib/python3.4/site-packages/pandas/core/internals.py” 第2066行,在_try_coerce_args中 引发TypeError TypeError
在处理上述异常期间,发生了另一个异常:
Traceback(最近一次调用最后一次):文件“”,第1行,in 文件 “/home/xxx/anaconda/envs/py3/lib/python3.4/site-packages/pandas/core/generic.py” 第3110行,取而代之 inplace = inplace,regex = regex)文件“/home/xxx/anaconda/envs/py3/lib/python3.4/site-packages/pandas/core/internals.py”, 第2870行,取而代之 return self.apply('replace',** kwargs)File“/home/xxx/anaconda/envs/py3/lib/python3.4/site-packages/pandas/core/internals.py”, 第2823行,申请中 applied = getattr(b,f)(** kwargs)文件“/home/xxx/anaconda/envs/py3/lib/python3.4/site-packages/pandas/core/internals.py”, 第607行,取而代之 如果不是mask.any():UnboundLocalError:在赋值之前引用的局部变量'mask'
这个相同的代码在pandas版本0.16.2上正常工作。
这是一个确认的错误吗?
答案 0 :(得分:2)
如评论所述,这已在master中修复,将包含在0.18(2016年1月即将发布)中:moment.js,仅存在于0.17.1中。
作为一种解决方法(假设您没有重复命名的列),系列替换仍然可以在0.17.1中正常工作:
for c in df.select_dtypes(include=["object"]).columns:
df[c] = df[c].replace('a', 'A')