熊猫 - 日期时间格式更改为"%m/%d/%Y"



stackoverflow社区大家好,

我想改变一个列的日期时间格式,但是我不工作,我不知道我做错了什么

执行以下代码后:

df6['beginn'] = pd.to_datetime(df6['beginn'], unit='s', errors='ignore')

我得到了这个输出,这很好,但是我想抽出一个小时只剩下%m/%d/%Y

ID       DATE
91060    2017-11-10 00:00:00
91061    2022-05-01 00:00:00
91062    2022-04-01 00:00:00
Name: beginn, Length: 91063, dtype: object 

我试过这个和许多其他的

df6['beginn'] = df6['beginn'].dt.strftime('%m/%d/%Y')

,得到如下输出:

AttributeError: Can only use .dt accessor with datetimelike values.

但是我不明白为什么,我用pd.to_datetime转换了数据吗?

感谢你给我的任何提示!非常感谢!

您必须使用errors="ignore"的原因是因为并非所有您正在解析的日期都是正确的格式。如果您使用errors="coerce",如@phi所提到的,那么任何不能转换的日期将被设置为NaT。列的数据类型仍将转换为datatime64,然后您可以按照自己的喜好进行格式化,并根据需要处理NaT

Date中有一个项目没有写成年/月/日(25月是错误的):

>>> df = pd.DataFrame({'ID': [91060, 91061, 91062, 91063], 'Date': ['2017/11/10', '2022/05/01', '2022/04/01', '2055/25/25']})
>>> df
ID        Date
0  91060  2017/11/10
1  91061  2022/05/01
2  91062  2022/04/01
3  91063  2055/25/25
>>> df.dtypes
ID       int64
Date    object
dtype: object

使用errors="ignore":

>>> df['Date'] = pd.to_datetime(df['Date'], errors='ignore')
>>> df
ID        Date
0  91060  2017/11/10
1  91061  2022/05/01
2  91062  2022/04/01
3  91063  2055/25/25
>>> df.dtypes
ID       int64
Date    object
dtype: object

Date仍然是一个对象,因为不是所有的值都被转换了。运行df['Date'] = df['Date'].dt.strftime("%m/%d/%Y")将导致AttributeError

使用errors="coerce":

>>> df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
>>> df
ID       Date
0  91060 2017-11-10
1  91061 2022-05-01
2  91062 2022-04-01
3  91063        NaT
>>> df.dtypes
ID               int64
Date    datetime64[ns]
dtype: object

无效日期被设置为NaT,列现在的类型是datatime64,你现在可以格式化它:

>>> df['Date'] = df['Date'].dt.strftime("%m/%d/%Y")
>>> df
ID        Date
0  91060  11/10/2017
1  91061  05/01/2022
2  91062  04/01/2022
3  91063         NaN

注意:当格式化datatime64时,它被转换回对象类型,因此NaT被更改为NaN。您遇到的问题是一些脏数据的格式不正确。

最新更新