pandas DataFrame.replace函数在datetime中被破坏

时间:2015-12-19 08:42:44

标签: python python-3.x pandas

在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上正常工作。
这是一个确认的错误吗?

1 个答案:

答案 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')