我有一个大型CSV文件,其中包含多个列以及Timestamp
列。文件按时间戳的升序排序。
我想将这些值读入pandas数据帧,但仅限于特定时间戳范围内,例如特定日期的下午4:00至下午5:00。
最有效的方法是什么?该文件非常大,我想避免完全通过它,因为它已经排序我希望它在达到上限时间时切断,并且还想避免,
手动拆分,是否有使用pandas read_csv
函数吗?
import pandas as pd
df = pd.read_csv('csvfile', header='infer', ???)
答案 0 :(得分:2)
没有内置方法可以使用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()。获取最接近开始时间的项目的位置,并获得最接近结束时间的项目的位置,然后获取它们之间的值。我不打算为你编码,但我认为这种方法应该有用。
检查出来:How do I find the closest values in a Pandas series to an input number?
答案 1 :(得分:2)
没有办法从read_csv()
直接执行此操作,因为它会尝试将整个数据集加载到内存中。我建议您使用csv
和.readline()
方法的标准上下文管理器迭代输入数据的行(请务必告诉csv the proper delimiters ..它可以为您进行拆分(参见python doc中的示例))
或者......您可以将pd.read_csv()
应用于每一行(通过设置header=None
告诉您数据不包含标题)或只是咬住子弹并使用.split(', “)。
无论哪种方式,您都可以使用.to_datetime()来解析相应列中的日期条目,然后使用.append()将其添加到数据框中。
这可以都是一个while循环,用于测试当前加载的日期何时超出您的范围。