Python 将dataframe转换为_datetime()的操作不正确

Python 将dataframe转换为_datetime()的操作不正确,python,pandas,Python,Pandas,我有一个这样的日期——“53年7月17日” 当我pd.to_datetime('17-JUL-53')它返回Timestamp('2053-07-17 00:00:00') 你可以说它是正确的,但实际返回的日期是1953-07-17。这在excel中是可以的,我们如何使用to_datetime()实现这一点 [编辑]仅显示在python中从str转换为time时发生的情况: >>> time.strptime('17-JUL-53', '%d-%b-%y') time.stru

我有一个这样的日期——“53年7月17日”

当我
pd.to_datetime('17-JUL-53')
它返回
Timestamp('2053-07-17 00:00:00')

你可以说它是正确的,但实际返回的日期是1953-07-17。这在excel中是可以的,我们如何使用to_datetime()实现这一点

[编辑]仅显示在python中从str转换为time时发生的情况:

>>> time.strptime('17-JUL-53', '%d-%b-%y')
time.struct_time(tm_year=2053, tm_mon=7, tm_mday=17, tm_hour=0, tm_min=0,tm_sec=0, tm_wday=3, tm_yday=198, tm_isdst=-1)

我认为您需要在年份中添加子字符串
19

有关datetime格式的详细信息,请参阅

%d-%b-%Y
表示:

%d-以零填充十进制数表示的月份日期
%b-月作为区域设置的缩写名
%Y-以世纪为小数点的年份


如果你所有的日期都是1900世纪,我会这样做:)


不知何故,你需要提到你在哪个世纪。。。在
pandas
中,这不能由
to_datetime
函数处理,因此需要在上游执行。下面是一种使用regex的方法:

import re
import pandas as pd

date = '17-JUL-53'

pd.to_datetime(re.sub(r'(\d{2}-\w{3}-)(\d{2})', r'\g<1>19\2', date))
#Timestamp('1953-07-17 00:00:00')
重新导入
作为pd进口熊猫
日期='53年7月17日'
pd.to_datetime(re.sub(r'(\d{2}-\w{3}-)(\d{2}'),r'\g19\2',date))
#时间戳('1953-07-17 00:00:00')

然后,你的基础数据中出现了一个问题,我会说:你如何区分1953年、1853年或2053年的“1953年7月17日”?是的。客户的数据,不能做太多。但我真的很感谢您提到这个PackageHanks,感谢您出色的正则表达式解决方案!不用担心,这很有趣,因为有一个诀窍是使用数字后面的组,即
r'\119\2'
不起作用!
from dateutil.relativedelta import relativedelta
input ='17-jul-53'
output = pd.to_datetime(input)
output_clean = output - relativedelta(years=100)
import re
import pandas as pd

date = '17-JUL-53'

pd.to_datetime(re.sub(r'(\d{2}-\w{3}-)(\d{2})', r'\g<1>19\2', date))
#Timestamp('1953-07-17 00:00:00')