Pandas to_datetime() 函数性能问题

Kei*_*thx 4 python pandas

有一个这样的 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 或通过循环进行迭代转换。

谢谢。

Ser*_*Dev 9

如果性能是一个问题,我建议使用以下函数将这些列转换为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)
to_datetime: 5799 ms
dateutil:    5162 ms
strptime:    1651 ms
manual:       242 ms
lookup:        32 ms
Run Code Online (Sandbox Code Playgroud)

  • 这个确切的问题已经开放了一段时间,实现非常简单:https://github.com/pandas-dev/pandas/issues/11665 如果有人感兴趣 (3认同)

Mic*_*elD 5

更新:此增强功能已合并到pandas 0.23.0中

缓存布尔值, 默认 False

如果为 True,则使用唯一的已转换日期的缓存来应用日期时间转换。解析重复的日期字符串时,尤其是具有时区偏移量的字符串时,可能会产生显着的加速。