【发布时间】:2019-12-19 10:14:31
【问题描述】:
我正在读取一个包含许多列的 csv 文件,其中之一是 TOD(一天中的时间)。有些事件会在午夜过后,而不是回滚到 00:00,时间只会在 24:00 之后不断增加。例如 23:59:50、24:00:01、24:00:10,...) EntryTOD 被解析为字符串。
我想应用一个简单的逻辑,即时间大于 24,只需减去 24 小时。这是我的代码:
for row in f2.itertuples():
# Fix times > 24h
if int(row.EntryTOD[0:2]) >= 24:
actualTime = int(row.EntryTOD[0:2]) - 24
f2.EntryTOD[row.Index-1] = str(actualTime) + row.EntryTOD[2:]
此代码有效,但对于 80k+ 行来说有点慢。运行大约需要 30-40 秒。
我的问题是:
1) 有更快的方法吗?
2) 另外,由于我不擅长 Python,有没有更优雅的方法?它可能仍然涉及遍历整个列,但我觉得这可以在 1 行代码中完成
提前谢谢你,
圭多
解决方案: 感谢雷内:
f2.EntryTOD = f2.EntryTOD.apply(lambda x: str(int(x.split(':')[0])-24)+x[2:] if int(x.split(':')[0]) > 23 else x)
这是非常快的单班轮!
【问题讨论】:
标签: python pandas performance dataframe iterator