首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我得到'ValueError: NaTType不支持strftime‘,尽管它不是空的?

为什么我得到'ValueError: NaTType不支持strftime‘,尽管它不是空的?
EN

Stack Overflow用户
提问于 2019-11-20 15:22:18
回答 1查看 17.1K关注 0票数 7

如果我错了,请原谅,但是当数据为空或空时,将发生AFAIK ValueError: NaTType does not support strftime。但我的数据不是。

假设我有这个数据帧。

代码语言:javascript
运行
复制
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']})

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

代码语言:javascript
运行
复制
for exp_date in df['expiry_date']:
    date = pd.to_datetime(exp_date, errors='coerce').strftime('%Y-%m-%d')
    print(date)

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

代码语言:javascript
运行
复制
ValueError: NaTType does not support strftime

我认为9999年听起来没有意义,但这是我拥有的数据,我不能改变它。那么,我能做什么呢?

EN

Stack Overflow用户

发布于 2019-11-20 15:24:25

我认为这里没有必要使用循环,先对column使用pd.to_datetime,然后使用Series.dt.strftime

代码语言:javascript
运行
复制
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' create missing values NaT for 'wrong' datetimes,因为这里超出了限制,timestamp limitations

代码语言:javascript
运行
复制
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')
票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58948809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档