在熊猫中将DD-MMM-YY转换为YYYY / MM / DD

时间:2020-04-15 14:59:42

标签: python pandas date

我的数据集中的

DoB列的日期格式如下:

0       12-Jan-79
1       13-Jan-70
2       11-Mar-84
3       11-Mar-84
4       01-May-86
          ...    
1080    15-Mar-81
1081    07-Jul-96
1082    11-Apr-90
1083    22-Oct-64
1084    12-Jul-95

我需要将其转换为标准日期格式YYYY / MM / DD。

我尝试了df['DateOfBirth'] = pd.to_datetime(df['DateOfBirth'])。在大多数情况下,这都可以正常工作。

但是在某些情况下,例如22-Oct-64,我可以观察到数据转换为将来的日期,例如2064-10-22

我想在整列上尝试使用DoB.str[:-2]+'19'+DoB.str[-2:]之类的东西。

如何解决该问题?

3 个答案:

答案 0 :(得分:0)

您应指定格式:

df['DateOfBirth'] = pd.to_datetime(df['DateOfBirth'], '%d/%m/%y')

答案 1 :(得分:0)

您可以执行此操作。以我的样本df为例:

In [922]: df                                                                                                                                                                                                
Out[922]: 
         DOB
0  22/Oct/64

In [925]: df['DOB'] = pd.to_datetime(df['DOB'])

In [927]: from datetime import timedelta, date

In [928]: future = df['DOB'] > date(year=2050,month=1,day=1)
In [930]: df.loc[future, 'DOB'] -= timedelta(days=365.25*100)

In [931]: df                                                                                                                                                                                                
Out[931]: 
         DOB
0 1964-10-22

这还将解决以后的日期问题。

docs

2000年(Y2K)问题:Python依赖于平台的C库,该库通常没有2000年问题,因为所有日期和时间都在内部以秒表示。给定%y格式代码时,函数strptime()可以解析两位数的年份。解析了两位数的年份后,将根据POSIX和ISO C标准进行转换:将值69-99映射为1969-1999,将值0-68映射为2000-2068。

答案 2 :(得分:0)

可以通过剪切两个字符添加19 ,然后粘贴最后两个字符来实现目标。

export HADOOP_CLASSPATH="/tmp/jdbcjars/db2jcc4.jar:/tmp/jdbcjars/db2jcc_license_cisuz.jar"
sqoop import --libjars /tmp/jdbcjars/db2jcc4.jar,/tmp/jdbcjars/db2jcc_license_cisuz.jar ...

代码:df['DateOfBirth'] Out[14]: 0 12-Jan-79 1 13-Jan-70 2 11-Mar-84 3 11-Mar-84 4 01-May-86 ... 1080 15-Mar-81 1081 07-Jul-96 1082 11-Apr-90 1083 22-Oct-64 1084 12-Jul-95 Name: DateOfBirth, Length: 1085, dtype: object

输出:

df['DateOfBirth'] = df['DateOfBirth'].str[:-2]+'19'+df['DateOfBirth'].str[-2:]

只需使用Out[16]: 0 12-Jan-1979 1 13-Jan-1970 2 11-Mar-1984 3 11-Mar-1984 4 01-May-1986 ... 1080 15-Mar-1981 1081 07-Jul-1996 1082 11-Apr-1990 1083 22-Oct-1964 1084 12-Jul-1995 Name: DateOfBirth, Length: 1085, dtype: object 将columnn转换为日期时间格式。