我有一个看起来像这样的数据框架
DEP_TIME
0 1851
1 1146
2 2016
3 1350
4 916
...
607341 554
607342 633
607343 657
607344 705
607345 628
我需要得到这一列DEP_TIME
中的每个值具有格式hh:mm
。所有细胞均为string
型,并可保持该类型。
一些单元格只缺少冒号(第0至3行),其他单元格也缺少前导0(第4+行)。有些单元格是空的,理想情况下应该有字符串值0。
我需要以一种有效的方式来做,因为我有几百万条记录。我该怎么做呢?
使用to_datetime
与Series.dt.strftime
:
df['DEP_TIME'] = (pd.to_datetime(df['DEP_TIME'], format='%H%M', errors='coerce')
.dt.strftime('%H:%M')
.fillna('00:00'))
print (df)
DEP_TIME
0 18:51
1 11:46
2 20:16
3 13:50
4 09:16
607341 05:54
607342 06:33
607343 06:57
607344 07:05
607345 06:28
import re
d = [['1851'],
['1146'],
['2016'],
['916'],
['814'],
[''],
[np.nan]]
df = pd.DataFrame(d, columns=['DEP_TIME'])
df['DEP_TIME'] = df['DEP_TIME'].fillna('0')
df['DEP_TIME'] = df['DEP_TIME'].apply(lambda y: '0' if y=='' else re.sub(r'(d{1,2})(d{2})$', lambda x: x[1].zfill(2)+':'+x[2], y))
df
DEP_TIME
0 18:51
1 11:46
2 20:16
3 09:16
4 08:14
5 0