如何在大熊猫的时间戳范围内读取CSV值



我有一个大的CSV文件,该文件具有许多列,以及Timestamp列。该文件按时间戳的上升顺序排序。

我想将这些值读为pandas dataframe,但仅在特定日期的特定时间戳范围内,例如4:00 pm到5:00 pm。

做到这一点的最有效方法是什么?该文件很大,我想避免完全通过它,因为它已排序,我希望在达到上时间戳时将其切断,并且还希望避免通过,进行手动分裂,是否有一种方法可以做到这一点使用Pandas read_csv功能?

import pandas as pd
df = pd.read_csv('csvfile', header='infer', ???)

没有内置的方式使用read_csv((在时间戳上停止。在此处找到文档:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

有一种方法可以通过将其分解成块来处理非常大的文件:

http://pandas.pydata.org/pandas-docs/stable/io.html#io-chunking

一种策略是找到最接近时间戳的值是ArgSort((。获取最接近您开始时间的物品的位置,并获取最接近最终时间的物品的位置,然后在它们之间获得值。我不会为您编码,但我认为方法应该有效。

检查一下:如何在熊猫系列中找到最接近的值?

没有办法从read_csv()进行此操作,因为它将尝试将整个数据集加载到内存中。我建议您使用csv.readline()方法的标准上下文管理器在输入数据的行上进行迭代(请务必告诉CSV适当的定界器..它可以为您进行分裂(请参阅Python doc中的示例((

或...您可以将 pd.read_csv()应用于每一行(告诉它您的数据不包含标题,通过设置header=None(,也可以咬住子弹并使用.split(','(。

无论哪种方式,您都可以使用.TO_DATETIME((从适当的列解析日期条目,然后使用.append((将其添加到数据框架中。

这一切都可以在一个时期循环中测试当前加载日期超过您的范围的时间。

做此操作的最简单方法

df = pd.read_csv(f, parse_dates=['datecolumn', 'datecolumn1'], infer_datetime_format=True)

最新更新