Fre*_*ers 0 python data-analysis pandas data-preprocessing
我在一个 pandas 数据框中有一个名为“date”的列名称,这是前 10 行:
0 22-Oct-2022
1 3-Dec-2019
2 27-Jun-2022
3 2023
4 15-Jul-2017
5 2019
6 7-Sep-2022
7 2021
8 30-Sep-2022
9 17-Aug-2021
Run Code Online (Sandbox Code Playgroud)
我想将所有这些日期转换为例如:
0 2023-05-19
1 2023-01-20
2 ...
Run Code Online (Sandbox Code Playgroud)
对于那些只有 YEAR 的行,我想将其设置为例如,如果原始 df 有:
0 2019
1 2021
Run Code Online (Sandbox Code Playgroud)
到
5 2019-01-01
7 2021-01-01
Run Code Online (Sandbox Code Playgroud)
换句话说,我的意思是我想在这种情况下设置今年的第一个日期,但保留原始年份而不是当前年份。
我试过:
df['date'] = pd.to_datetime(df['date'], errors='coerce', format='%d-%b-%Y')
Run Code Online (Sandbox Code Playgroud)
然而它正在生成 NaT 值。我希望你们能理解这个案例,如果有任何解决这个问题的想法,我将不胜感激
谢谢。
调用时您可以将格式设置为mixed(New in 2.0.0,参见GH50972to_datetime ) :
\n\n\n
format:str,默认无“混合”,单独推断每个元素的格式。这是有风险的,你应该将它与 dayfirst 一起使用。
\n
df["date"] = pd.to_datetime(df["date"], format="mixed", dayfirst=True)\nRun Code Online (Sandbox Code Playgroud)\n或者经典的双重日期解析+ fillna:
df["date"] = (\n pd.to_datetime(df["date"], errors="coerce", format="%Y")\n .fillna(pd.to_datetime(df["date"], errors="coerce", dayfirst=True))\n)\nRun Code Online (Sandbox Code Playgroud)\n输出:\n\xe2\x80\x8b
\nprint(df)\n\n date\n0 2022-10-22\n1 2019-12-03\n2 2022-06-27\n3 2023-01-01\n4 2017-07-15\n5 2019-01-01\n6 2022-09-07\n7 2021-01-01\n8 2022-09-30\n9 2021-08-17\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |