pandas to_datetime非常慢

时间:2017-01-12 18:05:26

标签: python performance pandas

我有一个大小合适的稀疏数据框,其中包含多个字符串格式的日期/时间列。我正在尝试使用标准的Pandas to_datetime()方法将它们转换为datetime(或Timestamp)对象。但它太慢了。

我最终写了一个"快速" to_datetime函数(下)。它明显更快,但似乎仍然很慢。分析告诉我所有时间花在最后一行上。

我是不是深陷了?是否有不同(更快)的方法来做到这一点?

In [98]: df.shape
Out[98]: (2497977, 79)

In [117]: len(df.reference_date.dropna())
Out[117]: 2004185

In [118]: len(df.reference_date.dropna().unique())
Out[118]: 157

In [119]: %time df.reference_date = pandas.to_datetime(df.reference_date)
CPU times: user 3min 2s, sys: 434 ms, total: 3min 2s
**Wall time: 3min 2s**

In [123]: %time fast_to_datetime(dataframe=df, column='reference_date', date_format='%Y%m%d')
CPU times: user 3.58 s, sys: 343 ms, total: 3.92 s
**Wall time: 3.92 s**


def fast_to_datetime(dataframe, column, date_format=None):
    tmp_dates = dataframe[column].dropna().unique()

    unique_dates = pandas.DataFrame(tmp_dates, columns=['orig_date'])
    unique_dates.set_index(keys=['orig_date'], drop=False, inplace=True, verify_integrity=True)

    unique_dates[column] = pandas.to_datetime(unique_dates.orig_date, format=date_format)

    dataframe.set_index(keys=column, drop=False, inplace=True)

    dataframe[column] = unique_dates[column]


In [126]: sys.version
Out[126]: '2.7.5 (default, Nov 20 2015, 02:00:19) \n[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]'

In [127]: pandas.__version__
Out[127]: u'0.17.0'

0 个答案:

没有答案