清除pandas数据帧中不一致的日期格式

时间:2017-01-09 17:41:46

标签: python pandas data-cleaning

我有一个非常大的数据框,其中一列,['date'],datetime(dtype仍为字符串)格式如下。有时它显示为hh:mm:ss,有时显示为h: mm:ss(小时9及更早)

Tue Mar 1 9:23:58 2016
Tue Mar 1 9:29:04 2016 
Tue Mar 1 9:42:22 2016
Tue Mar 1 09:43:50 2016
当我尝试将字符串转换为日期时间格式时,

pd.to_datetime()将无法工作,所以我希望找到一些帮助,在错过的时间前获得0。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

import pandas as pd
date_stngs = ('Tue Mar 1 9:23:58 2016','Tue Mar 1 9:29:04 2016','Tue Mar 1 9:42:22 2016','Tue Mar 1 09:43:50 2016')
a = pd.Series([pd.to_datetime(date) for date in date_stngs])
print a

输出

0   2016-03-01 09:23:58
1   2016-03-01 09:29:04
2   2016-03-01 09:42:22
3   2016-03-01 09:43:50

答案 1 :(得分:0)

time = df[0].str.split(' ').str.get(3).str.split('').str.get(0).str.strip().str[:8]
year = df[0].str.split('--').str.get(0).str[-5:].str.strip()
daynmonth = df[0].str[:10].str.strip()

df_1['date'] = daynmonth + ' ' +year + ' ' + time

df_1['date'] = pd.to_datetime(df_1['date'])

在重新排列订单时发现这可以自己工作

答案 2 :(得分:0)

假设您有一个包含上述字符串且列名为0的单列DataFrame,则以下内容将按空格分割字符串,然后取出第三个字符串并将其填充为zfill < / p>

假设开始df

                         0
0   Tue Mar 1 9:23:58 2016
1   Tue Mar 1 9:29:04 2016
2   Tue Mar 1 9:42:22 2016
3  Tue Mar 1 09:43:50 2016

df1 = df[0].str.split(expand=True)
df1[3] = df1[3].str.zfill(8)
pd.to_datetime(df1.apply(lambda x: ' '.join(x.tolist()), axis=1))

输出

0   2016-03-01 09:23:58
1   2016-03-01 09:29:04
2   2016-03-01 09:42:22
3   2016-03-01 09:43:50
dtype: datetime64[ns]