我有一个1gb的csv文件。该文件有大约10000000(10 Mil)行。我需要遍历这些行以获得几个选定行的最大值(基于条件)。问题是读取csv文件。
我使用Python的Pandas包。函数的作用是:读取csv文件时抛出MemoryError。 1) 我试过将文件分割成块并读取它们,现在,concat()函数有内存问题。
tp = pd.read_csv('capture2.csv', iterator=True, chunksize=10000, dtype={'timestamp': float, 'vdd_io_soc_i': float, 'vdd_io_soc_v': float, 'vdd_io_plat_i': float, 'vdd_io_plat_v': float, 'vdd_ext_flash_i': float, 'vdd_ext_flash_v': float, 'vsys_i vsys_v': float, 'vdd_aon_dig_i': float, 'vdd_aon_dig_v': float, 'vdd_soc_1v8_i': float, 'vdd_soc_1v8_v': float})
df = pd.concat(tp,ignore_index=True)
我用了dtype来减少内存占用,仍然没有改进。
基于多篇博客文章。 我已经更新了numpy和pandas,所有这些都是最新版本。仍然没有运气。
如果有人能解决这个问题,那就太好了。
请注意:
我有64位操作系统(Windows 7)
我正在运行Python 2.7.10(默认值,2015年5月23日,09:40:32)[MSC v.1500 32位]
我有4GB内存。
Numpy最新版本(pip安装程序显示已安装最新版本)
熊猫最新。(pip安装程序说安装了最新版本)
请检查一下Python版本好吗? 可能你的32位有一些限制。
尝试安装64位并尝试将数据加载到pandas中,而不使用concat,例如:
Pandas read_csv()具有低内存标志。
只有在使用C解析器时,low_memory标志才可用
您也可以使用内存映射标志
source
p.s.使用64位python-请参阅我的评论
如果试图读取的文件太大,无法作为一个整体包含在内存中,则也无法将其分块读取,然后将其重新组合到内存中,因为最终至少需要同样多的内存。
您可以尝试在chuncks中读取文件,过滤掉每个chunck中不必要的行(基于您提到的条件),然后重新组合数据帧中的其余行。
这样的话:
和/或找到每个chunck的最大值,然后找到每个chunck的最大值。
相关问题 更多 >
编程相关推荐