自1980年以来,我在csv中有每日天气数据,大小超过10GB。我对日期感兴趣的列,我希望能够让用户选择一个日期,以便只返回该日期的结果。
我想知道是否可以同时读入和子集以节省内存和计算
我是python的新手并尝试过:
d=pd.read_csv('weather.csv',sep='\t')['Date' == 'yyyymmdd']
无济于事。
是否可以读入仅存在一天的所有数据(ei 20011004)?
简短的回答:从csv
你将无法做到这一点。
答案很长:csv
格式对于人类来说非常方便阅读,但对于操作机器而言,这是最糟糕的。您需要逐行解析,直到找到日期符合请求日期的行。
一种可能的解决方案:您应该将csv
转换为更适合此类操作的格式。我的建议是使用类似hdf5的东西。你可以用pandas读取整个csv
,然后将它保存为hdf5文件d.to_hdf('weather.h5', format='table')
。你可以查看pandas hdf文档here。这应该允许您以更高的内存和cpu有效的方式处理。
二进制文件可以实现索引和排序,使您无需通过所有数据来检查所需的那些部分。相同的想法适用于数据库。
附录:二进制格式还有其他选项,例如parquet
(可能会更好,你应该测试)或feather
(如果你想要与R
进行某种程度的“原生”互操作)。您可能需要查看以下post,以获取有关以不同格式及其大小加载/保存时间的一些见解。