pandas 为什么会出现“ValueError:NaTType不支持strftime'即使它不为空?

gwbalxhn  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(536)

如果我说错了,请原谅,当数据为null或空时会发生AFAIK ValueError: NaTType does not support strftime,但我的数据不是。
假设我有这个 Dataframe 。

df = pd.DataFrame({'personnel_number': ['123', '345', '567', '789', '000', '4444'],
                 'expiry_date': ['2020-12-07', '2099-12-04', '2019-08-30', '2022-03-19', '2020-09-06', '9999-12-31']})

我想用下面的代码把它转换成日期类型格式。

for exp_date in df['expiry_date']:
    date = pd.to_datetime(exp_date, errors='coerce').strftime('%Y-%m-%d')
    print(date)

但不知何故,当循环到达最后一个数据(“9999-12-31”日期数据)时,我总是得到这个错误。

ValueError: NaTType does not support strftime

我想9999年听起来不太合理,但这是我拥有的数据,我不能改变它。那么,我能做什么呢?

nvbavucw

nvbavucw1#

我认为这里的循环是不必要的,使用pd.to_datetime与列,然后Series.dt.strftime

df['expiry_date'] = pd.to_datetime(df['expiry_date'], errors='coerce').dt.strftime('%Y-%m-%d')
print(df)
  personnel_number expiry_date
0              123  2020-12-07
1              345  2099-12-04
2              567  2019-08-30
3              789  2022-03-19
4              000  2020-09-06
5             4444         NaT

错误原因是参数errors='coerce''wrong'日期时间创建了缺失值NaT,因为此处超出了时间戳限制:

In [92]: pd.Timestamp.min
Out[92]: Timestamp('1677-09-21 00:12:43.145225')

In [93]: pd.Timestamp.max
Out[93]: Timestamp('2262-04-11 23:47:16.854775807')
zrfyljdw

zrfyljdw2#

进口Pandas当PD
日期= www.example.com日期时间(表达式日期,错误="强制").字符串时间(" %Y- % m- % d")pd.to_datetime(exp_date, errors='coerce').strftime('%Y-%m-%d')
而且,你可以做的是:
日期= www.example.com日期时间(表达式日期,格式=" %Y- % m- % d",错误="强制")pd.to_datetime(exp_date, format ='%Y-%m-%d', errors='coerce')

相关问题