Pandas dataframe to_datetime()正在错误地转换日期

时间:2015-11-11 08:36:28

标签: python pandas

我有这种格式的约会 - '17 -JUL-53'

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

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

[edit]只是为了说明在python中从str转换为时间会发生什么:

>>> 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)

3 个答案:

答案 0 :(得分:1)

我认为你需要在年份中添加子串19 有关日期时间格式的详细信息为here

import pandas as pd

s = '17-JUL-53'
d = s[:7] + '19' + s[7:]
print d
#17-JUL-1953
dt = pd.to_datetime(d, format='%d-%b-%Y')
print dt
#1953-07-17 00:00:00

%d-%b-%Y表示:

  

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

答案 1 :(得分:1)

我会这样做,提供所有日期都在1900世纪:)

from dateutil.relativedelta import relativedelta
input ='17-jul-53'
output = pd.to_datetime(input)
output_clean = output - relativedelta(years=100)

答案 2 :(得分:1)

不知怎的,你需要提一下你在哪个世纪......在pandas这个to_datetime函数无法处理,所以你需要在上游进行。这是一种使用正则表达式的方法:

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')