【发布时间】:2015-08-30 02:22:45
【问题描述】:
NaT 缺失值出现在我的数据框的末尾,如下所示。这可以理解地引发 ValueError:
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/tzinfo.py”,第 314 行,本地化 loc_dt = tzinfo.normalize(dt.replace(tzinfo=tzinfo)) ValueError: 月份必须在 1..12
我尝试过同时使用 dropna:
data[col_name].dropna(0, inplace=True)
和 fillna,由Working with Missing Data section 鼓励:
data[col_name].fillna(0, inplace=True)
在这两行之前,我尝试通过用纪元时间替换非日期时间来清理数据:
data[col_name] = a_col.apply(lambda x: x if isinstance(x, datetime.datetime) else epoch)
因为 NaT 在技术上是一个日期时间,所以该功能没有涵盖这种情况。因为isnull 会处理这个,所以我写了这个函数来应用到data[col_name]:
def replace_time(x):
if pd.isnull(x):
return epoch
elif isinstance(x, datetime.datetime):
return x
else:
return epoch
尽管它进入了 pd.isnull 部分,但该值没有改变。但是,当我在这个系列(第二个值是 NaT)上尝试该功能时,它可以工作:
s = pd.Series([pd.Timestamp('20130101'),np.nan,pd.Timestamp('20130102 9:30')],dtype='M8[ns]')
数据:
2003-04-29 00:00:00
NaT
NaT
NaT
【问题讨论】:
-
你使用的是什么版本的 pandas 和 numpy?
dropna和fillna不是已经在做你想做的事了吗? -
Numpy 是 1.8.0rc1。熊猫是 0.16.1
标签: python python-2.7 datetime pandas