使用pandas.to_datetime转换空值是不可预测的。

3

为什么在 pandasto_datetimeto_numeric 中,None 值的处理方式不同(前者不可预测,后者可预测)?

import pandas as pd

VALUE = None

print(pd.to_datetime(VALUE))
print(pd.to_numeric(VALUE))

print(pd.__version__)    

返回值

None
nan
0.23.4

为什么pd.to_datetime(None)不等于pd.NaT

对于 VALUE = [None],您看到了什么? - jpp
pd.to_datetime([None]) 返回 DatetimeIndex(['NaT'], dtype='datetime64[ns]', freq=None), 但是 pd.to_numeric([None]) 返回 array([nan])(仍然可预测) - dinya
1个回答

3
简短的回答是在datetimes.py中pd.to_datetime包含以下内容:pd.to_datetime
if arg is None: 
    return None

为什么做出这种设计选择是一个更好的问题,应该直接向Pandas开发人员询问,例如,您可以在Github上提出问题

正如您所发现的,使用列表或系列进行处理,即通常的用例是一致的:

VALUE = [None]

pd.to_datetime(VALUE)  # DatetimeIndex(['NaT'], dtype='datetime64[ns]', freq=None)
pd.to_numeric(VALUE)   # [ nan]

作为解决方法,对于标量,我建议您使用pd.Timestamp

pd.Timestamp(None)     # NaT

1
在我的情况下(该函数是转换器字典的元素),我应该使用“lambda x: pd.NaT if x is None else pd.to_datetime(x, errors="coerce")”。 - dinya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接