我有一些具有某些功能的df作为对象类型,我想将其转换为日期类型。当我尝试使用pd.to_datetime进行转换时,其中一些功能会返回“Out of bounds timestamp”错误消息。为了解决这个问题,我添加了“errors = coerce”参数,然后寻求删除所有结果的NAs。例如:
pd.to_datetime(df[date_features], infer_datetime_format = True, errors = 'coerce')
df[date_features].dropna(inplace= True)
然而,这似乎没有将功能转换为'datetime:'(“maturity_date”是我尝试转换为datetime的date_features之一)。
df.[maturity_date].describe()
count 3355323
unique 11954
top 2015-12-01
freq 29607
Name: maturity_date, dtype: object
此外,如果我再次尝试使用pd.to_datetime转换maturity_date而不使用“coerce”,我会得到“Out of bounds”时间戳。
我希望我已经彻底地描述了这个问题。
有什么想法?
答案 0 :(得分:2)
pd.to_datetime
不是一个就地操作。您的代码执行转换,然后继续丢弃结果。正确的做法是将结果分配回来,如此 -
df['date_features'] = pd.to_datetime(df.date_features, errors='coerce')
此外,请勿在属于数据框的列上调用dropna
,因为这不会修改数据框(即使使用inplace=True
)。而是使用dropna
属性在数据框上调用subset
-
df.dropna(subset='date_features', inplace=True)
现在,正如所观察到的,maturity_date
将如下所示 -
results["maturity_date"].head()
0 2017-04-01
1 2017-04-01
2 2017-04-01
3 2016-01-15
4 2016-01-15
Name: maturity_date, dtype: datetime64[ns]
如您所见,dtype
为datetime64
,表示此操作有效。如果您致电describe()
,它会执行一些标准聚合并将结果作为新系列返回。此系列以与其他任何方式相同的方式显示,包括适用于 it 的dtype
描述,而不是其描述的列。