将数据类型(“O”)转换为日期格式时出现问题

2024-09-27 09:35:32 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我在原始数据集中有日期(列名称为“最早的日期”),但是当我在Jupyter上检查数据类型时,它是数据类型(“O”),我使用以下代码将其转换为日期时间格式,代码如下:

pd.to_datetime(final_3['earliest_cr_line'], format='%m/%d/%Y')

但此代码将错误显示为ValueError:时间数据“Jan-85”与格式“%m/%Y”不匹配(匹配)

如何将整个列转换为日期格式,然后创建另一列,在该列中我可以看到该日期与2015年6月30日之间的月差


Tags: to代码formatdatetime原始数据格式错误line
1条回答
网友
1楼 · 发布于 2024-09-27 09:35:32

如果所有datetime的格式为MMM-YY,并且MMM是月份名称的前3个字母,则使用:

print (final_3)
        id earliest_cr_line
0  1077501           Jan-85
1  1077430           Apr-99
2  1077175           Nov-01
3  1076863           Feb-96
4  1075358           Jan-96

final_3['earliest_cr_line'] = pd.to_datetime(final_3['earliest_cr_line'], format='%b-%y')

final_3['diff'] = (pd.to_datetime('2015-06-30') - final_3['earliest_cr_line']).dt.days
print (final_3)
     id earliest_cr_line   diff
0  1077501       1985-01-01  11137
1  1077430       1999-04-01   5934
2  1077175       2001-11-01   4989
3  1076863       1996-02-01   7089
4  1075358       1996-01-01   7120

编辑:你可以用一些树桩减去100年,这里使用year > 2021

print (final_3)
        id earliest_cr_line
0  1077501           Jan-63
1  1077430           Apr-99
2  1077175           Nov-01
3  1076863           Feb-96
4  1075358           Jan-96

final_3['earliest_cr_line'] = pd.to_datetime(final_3['earliest_cr_line'], format='%b-%y')

mask = final_3['earliest_cr_line'].dt.year > 2021
h = pd.DateOffset(years=100)
final_3.loc[mask, 'earliest_cr_line'] = final_3['earliest_cr_line'] - h

final_3['diff'] = (pd.to_datetime('2015-06-30') - final_3['earliest_cr_line']).dt.days

print (final_3)
        id earliest_cr_line   diff
0  1077501       1963-01-01  19173
1  1077430       1999-04-01   5934
2  1077175       2001-11-01   4989
3  1076863       1996-02-01   7089
4  1075358       1996-01-01   7120

相关问题 更多 >

    热门问题