【问题标题】:Pandas slow to merge and convert to datetimePandas 合并和转换为日期时间的速度很慢
【发布时间】:2023-04-01 05:11:01
【问题描述】:

我在包含日期和时间的 DataFrame 中有两列数据。两者都以字符串开头。我希望它们最终合并为日期时间格式的单列。

DataFrame的头部是:

    Date          variable   value
0   '04/10/2020'    '00:30'  81.310
1   '05/10/2020'    '00:30'  121.245
2   '06/10/2020'    '00:30'  77.020
3   '07/10/2020'    '00:30'  100.705
4   '08/10/2020'    '00:30'  114.370

它们位于名为 df_flattened 的 DF 中,大约有 20k 行,我目前使用的代码是:

df_flattened['DateTime'] = df_flattened.apply(lambda x: x['Date'] + ' ' + x['variable'], axis=1)
df_flattened['DateTime'] = pd.to_datetime(df_flattened['DateTime'])

但是,这需要大约 2.6 秒的时间来运行,并且数据集将来会变得更大。任何人都可以建议一种快速的方法吗?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    您可以使用+ 代替apply 连接列:

    df_flattened['DateTime'] = pd.to_datetime(df_flattened['Date'] + ' ' + df_flattened['variable'])
    

    也可以指定加入日期时间的格式:

    df_flattened['DateTime'] = pd.to_datetime(df_flattened['Date'] + ' ' + df_flattened['variable'], format='%d/%m/%Y %H:%M')
    

    20k 行的性能:

    #20k rows
    df_flattened = pd.concat([df_flattened] * 4000, ignore_index=True)
    
    
    In [44]: %%timeit
        ...: df_flattened['DateTime'] = df_flattened.apply(lambda x: x['Date'] + ' ' + x['variable'], axis=1)
        ...: df_flattened['DateTime'] = pd.to_datetime(df_flattened['DateTime'])
        ...: 
        ...: 
    325 ms ± 26.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
    
    In [45]: %timeit df_flattened['DateTime'] = pd.to_datetime(df_flattened['Date'] + ' ' + df_flattened['variable'])
    11.9 ms ± 1.51 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [46]: %timeit df_flattened['DateTime'] = pd.to_datetime(df_flattened['Date'] + ' ' + df_flattened['variable'], format='%d/%m/%Y %H:%M')
    9.55 ms ± 96.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    

    【讨论】:

    • @GalacticPonderer... 删除不必要的 apply 与 axis=1 并使用已知格式将大大提高性能。 +1
    • 确实如此。将其降至 0.9 秒。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 2020-06-14
    • 2016-01-27
    • 2015-11-24
    • 2018-08-30
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多