NaT缺失值出现在我的数据帧的末尾,如下所示。这可以理解地引发了ValueError:
File" /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/tzinfo.py" ;,第314行,本地化 loc_dt = tzinfo.normalize(dt.replace(tzinfo = tzinfo)) ValueError:month必须在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将处理此问题,因此我编写了此函数以应用于数据[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
答案 0 :(得分:2)
尝试:
john_sam01 [TIF 15355474840].jpg
答案 1 :(得分:2)
这里的主要问题是你是通过这个表达式链式索引
data[col_name].dropna(0, inplace=True)
这可能会修改副本,因此实际上不会发生任何变化。实际上它显示SettingWithCopy
警告是非常棘手的。请参阅文档here
.fillna/.dropna
是填充datetime64[ns]
dtypes的合适方法。使用.apply
是非常低效的。
In [16]: df = DataFrame({ 'date' : pd.Series([pd.Timestamp('20130101'),np.nan,pd.Timestamp('20130102 9:30')]) })
In [17]: df
Out[17]:
date
0 2013-01-01 00:00:00
1 NaT
2 2013-01-02 09:30:00
In [18]: df.date.fillna(0)
Out[18]:
0 2013-01-01 00:00:00
1 1970-01-01 00:00:00
2 2013-01-02 09:30:00
Name: date, dtype: datetime64[ns]