【问题标题】:faster csv loading with datetime index pandas使用日期时间索引 pandas 更快地加载 csv
【发布时间】:2015-09-28 09:07:41
【问题描述】:

我经常迭代存储在 csv 文件中的金融价格数据。就像我的所有分析都与时间相关时,使用 pandas 日期时间对象来子集和组织数据的可访问性。

我的问题是,当我将文件读入计算机内存时,pandas.read_csv()pandas.to_datetime() 顶部提供的 parse_dates 参数都非常耗时。

有谁知道在 python 中处理时间戳的更好方法,可以优化以运行需要加载到内存中的许多文件?

%timeit pd.read_csv("C:\\Users\\rgalbo\\Desktop\\Equity\\Data\\sp - working data\\30min--Adj\\AAPL_24.csv",index_col=[0])

10 loops, best of 3: 112 ms per loop

使用 parse_date = True

%timeit pd.read_csv("C:\\Users\\rgalbo\\Desktop\\Equity\\Data\\sp - working data\\30min--Adj\\AAPL_24.csv",index_col=[0],parse_dates=True)

1 loops, best of 3: 7.5 s per loop

【问题讨论】:

  • 你确定这是你的瓶颈而不是 I/O?
  • 我不确定,我只是想知道是否有人处理过日期时间转换并遇到过长时间执行的问题
  • 我会尝试对您的测试更加孤立。首先读入数据并尝试将转换作为第二步,仅对第二步进行计时。您也可以尝试 parse_dates=['column_name'],因为我相信 parse_dates=True 会迫使熊猫猜测日期时间是什么。其他技巧包括以数字格式存储您的日期时间(例如自纪元以来的毫秒数)以及存储压缩的 csv 文件并使用 pd.read_csv(..., compression='gzip') 读取它们以权衡 CPU 的 I/O。
  • 当我隔离将索引的日期转换为步骤时,在 I/O 之后完成转换需要更长的时间。我可能不得不尝试压缩或其他更有利于这种计算的格式

标签: python csv datetime


【解决方案1】:

在测试了加载和解析具有 13,811,418 行具有 98 个唯一日期值的 csv 文件的几个选项之后,我们到达了下面的 sn-p,并发现如果我们通过带有预定义日期的 format 参数 -格式(在我们的例子中是'%m/%d/%Y'),我们可以使用 Pandas.0.15.3 达到2.52 s

def to_date(dates, lookup=False, **args):
    if lookup:
        return dates.map({v: pd.to_datetime(v, **args) for v in dates.unique()})
    return pd.to_datetime(dates, **args)
  • 还使用 coerce=True(或在更高版本中为粗='raise')启用日期格式验证,否则错误值将保留为字符串值,并且在任何其他日期时会导致错误-对数据框列执行时间操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2020-01-02
    • 2017-08-13
    • 2021-01-19
    • 2019-06-22
    相关资源
    最近更新 更多