有一个这样的 df:
Dat
10/01/2016
11/01/2014
12/02/2013
Run Code Online (Sandbox Code Playgroud)
“Dat”列具有对象类型,因此我尝试使用 to_datetime () pandas 函数将其切换为日期时间:
to_datetime_rand = partial(pd.to_datetime, format='%m/%d/%Y')
df['DAT'] = df['DAT'].apply(to_datetime_rand)
Run Code Online (Sandbox Code Playgroud)
一切正常,但是当我的 df 高于 20 亿行时,我遇到了性能问题。所以在这种情况下,这种方法会卡住并且效果不佳。
pandas to_datetime() 函数是否能够通过 chuncks 或通过循环进行迭代转换。
谢谢。
如果性能是一个问题,我建议使用以下函数将这些列转换为date_time:
def lookup(s):
"""
This is an extremely fast approach to datetime parsing.
For large data, the same dates are often repeated. Rather than
re-parse these, we store all unique dates, parse them, and
use a lookup to convert all dates.
"""
dates = {date:pd.to_datetime(date) for date in s.unique()}
return s.apply(lambda v: dates[v])
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)to_datetime: 5799 ms dateutil: 5162 ms strptime: 1651 ms manual: 242 ms lookup: 32 ms
更新:此增强功能已合并到pandas 0.23.0中
缓存:布尔值, 默认 False
如果为 True,则使用唯一的已转换日期的缓存来应用日期时间转换。解析重复的日期字符串时,尤其是具有时区偏移量的字符串时,可能会产生显着的加速。