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
但我不明白为什么,我是否转换了数据?
感谢您给我的任何提示!多谢!
您必须使用的原因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。您遇到的问题是一些脏数据的格式不正确。
归档时间: |
|
查看次数: |
11884 次 |
最近记录: |