我完全不知道如何为此构建一个MWE,因为当我对数据帧进行切片时,这种行为就会发生,参见下面的控制台输出:
第一个切片,最后一行的NaT
:
In [161]: df.iloc[3802:11775].astype({"date": "datetime64"})[["date"]]
Out[161]:
date
258 2014-09-14
259 2018-10-12
259 2018-10-12
259 2018-10-12
259 2018-10-12
.. ...
781 NaT
781 NaT
781 NaT
781 NaT
781 NaT
[7973 rows x 1 columns]
如果我更新片从3803开始,它工作得很好:
In [162]: df.iloc[3803:11775].astype({"date": "datetime64"})[["date"]]
Out[162]:
date
259 2018-10-12
259 2018-10-12
259 2018-10-12
259 2018-10-12
259 2018-10-12
.. ...
781 2014-09-14
781 2014-09-14
781 2014-09-14
781 2014-09-14
781 2014-09-14
[7972 rows x 1 columns]
和id我连接第一部分和最后一部分,因为我认为在id 3802的行中可能有一些东西,它仍然有效:
In [165]: pd.concat([df.iloc[3800:3803], df.iloc[11770:11775]]).astype({"date": "datetime64"})[["date"]]
Out[165]:
date
258 2014-09-14
258 2014-09-14
258 2014-09-14
781 2014-09-14
781 2014-09-14
781 2014-09-14
781 2014-09-14
781 2014-09-14
我不得不说我已经用熊猫超过3年了,但在这里我完全迷路了。
编辑
我已经在一个要点中添加了这个系列
这个bug在pandas 1.3.0中可以看到,实际上在pandas 1.3.3中已经修复了
我无法重现您的错误:
In [31]: df = pd.read_csv("date_error.csv")
In [32]: df.iloc[3802:11775].astype({"date": "datetime64"})
Out[32]:
Unnamed: 0 date
3802 258 2014-09-14
3803 259 2018-10-12
3804 259 2018-10-12
3805 259 2018-10-12
3806 259 2018-10-12
... ... ...
11770 781 2014-09-14
11771 781 2014-09-14
11772 781 2014-09-14
11773 781 2014-09-14
11774 781 2014-09-14
[7973 rows x 2 columns]
In [33]: df["date"].isna().any()
Out[33]: False
也就是说,我建议使用pd.to_datetime
而不是astype()
。