当pandas数据框中只有年份时,设置年份的第一个日期

dfuffjeb  于 2023-05-27  发布在  其他
关注(0)|答案(2)|浏览(122)

我在一个pandas dataframe中有一个名为“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

我想将所有这些日期转换为例如:

0    2023-05-19 
1    2023-01-20 
2    ...

对于那些只有我想设置为YEAR的行,例如,如果原始df有:

0           2019
1           2021

5           2019-01-01
7           2021-01-01

换句话说,我的意思是,我想为这种情况设置今年的第一个日期,但保留原来的一年,而不是今年。
我试过:

df['date'] = pd.to_datetime(df['date'], errors='coerce', format='%d-%b-%Y')

但是它生成NaT值。我希望你能理解这种情况下的家伙,我会很感激任何想法来解决这个问题
谢谢。

8aqjt8rx

8aqjt8rx1#

调用to_datetime时,可以将 format 设置为mixed2.0.0中的新增内容,参见GH50972):
formatstr,default None
“mixed”,单独推断每个元素的格式。这是有风险的,你应该和dayfirst沿着使用。

df["date"] = pd.to_datetime(df["date"], format="mixed", dayfirst=True)

或者一个经典的double date-parsing + fillna

df["date"] = (
    pd.to_datetime(df["date"], errors="coerce", format="%Y")
        .fillna(pd.to_datetime(df["date"], errors="coerce", dayfirst=True))
)

输出:

print(df)

        date
0 2022-10-22
1 2019-12-03
2 2022-06-27
3 2023-01-01
4 2017-07-15
5 2019-01-01
6 2022-09-07
7 2021-01-01
8 2022-09-30
9 2021-08-17
rkue9o1l

rkue9o1l2#

您必须手动更新这些值,首先可以标准化只有年份的行,如下所示:

condition = data['date'].length == 4
data.loc[condition, 'date'] = '1-Jan' + df['date'].astype(str)

然后尝试对结果使用to_datetime函数

相关问题