我有一个非常大的数据框,其中一列,['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。
非常感谢任何帮助!
答案 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]