python - 为什么我得到 'ValueError: NaTType does not support strftime',即使它不为空?

标签 python pandas datetime

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

假设我有这个数据框。

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 年听起来不太合理,但这是我拥有的数据,我无法更改它。那么,我能做什么呢?

最佳答案

我认为这里的循环是没有必要的,使用 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,因为这里超出了限制, timestamp limitations :

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')

关于python - 为什么我得到 'ValueError: NaTType does not support strftime',即使它不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58948809/

相关文章:

python - groupby 并选择每个组的第一个、第二个和第四个成员?

python - 在条件语句后设置数据框

c# - 不支持 Linq-to-EF DateTime.ToLocalTime

Java从字符串中解析带时区的日期

python - 使用 pyExcelerator 通过 Django 生成动态 Excel 文件。确保唯一的临时文件名

python - PySide2 加载和创建组件时发生了什么?

python - 通过迭代行创建新的循环因变量

c# - UtcNow.ToLocalTime() 在 CentOS 上返回 UTC 时间而不是本地时间

python - PiCamera 流媒体

python - 计算大序列过零的不同结果