Pandas - 日期时间格式更改为“%m/%d/%Y”

Ant*_*min 2 python format datetime pandas

你好,stackoverflow 社区,

我想更改列的日期时间格式,但我不起作用,而且我不知道我做错了什么。

执行以下代码后:

df6['beginn'] = pd.to_datetime(df6['beginn'], unit='s', errors='ignore')
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出,那很好,但我想抽出一个小时来只剩下%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 
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个和许多其他的

df6['beginn'] = df6['beginn'].dt.strftime('%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)

并得到以下输出:

AttributeError: Can only use .dt accessor with datetimelike values.
Run Code Online (Sandbox Code Playgroud)

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

感谢您给我的任何提示!多谢!

eHa*_*azi 5

您必须使用的原因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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

ColumnDate仍然是一个对象,因为并非所有值都已转换。运行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
Run Code Online (Sandbox Code Playgroud)

无效日期设置为 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
Run Code Online (Sandbox Code Playgroud)

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