pandas .drop()内存错误大文件
pandas .drop() memory error large file
供参考,这都是在 Windows 7 x64 位机器上 PyCharm 教育版 1.0.1,Python 3.4.2 和 Pandas 0.16 .1
我有一个约 791MB 的 .csv 文件,其中约有 304 万行 x 24 列。该文件包含爱荷华州从 2014 年 1 月到 2015 年 2 月的酒类销售数据。如果您有兴趣,可以在此处找到该文件:https://data.iowa.gov/Economy/Iowa-Liquor-Sales/m3tr-qhgy。
其中一列名为商店位置,包含地址,包括纬度和经度。下面程序的目的是从商店位置单元格中取出纬度和经度,并将它们分别放在自己的单元格中。当文件被缩减到约 104 万行时,我的程序正常运行。
1 import pandas as pd
2
3 #import the original file
4 sales = pd.read_csv('Iowa_Liquor_Sales.csv', header=0)
5
6 #transfer the copies into lists
7 lat = sales['STORE LOCATION']
8 lon = sales['STORE LOCATION']
9
10 #separate the latitude and longitude from each cell into their own list
11 hold = [i.split('(', 1)[1] for i in lat]
12 lat2 = [i.split(',', 1)[0] for i in hold]
13 lon2 = [i.split(',', 1)[1] for i in hold]
14 lon2 = [i.split(')', 1)[0] for i in lon2]
15
16 #put the now separate latitude and longitude back into their own columns
17 sales['LATITUDE'] = lat2
18 sales['LONGITUDE'] = lon2
19
20 #drop the store location column
21 sales = sales.drop(['STORE LOCATION'], axis=1)
22
23 #export the new panda data frame into a new file
24 sales.to_csv('liquor_data2.csv')
然而,当我尝试 运行 包含完整 304 万行文件的代码时,它给我这个错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1595, in drop
dropped = self.reindex(**{axis_name: new_axis})
File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 2505, in reindex
**kwargs)
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1751, in reindex
self._consolidate_inplace()
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 2132, in _consolidate_inplace
self._data = self._protect_consolidate(f)
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 2125, in _protect_consolidate
result = f()
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 2131, in <lambda>
f = lambda: self._data.consolidate()
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 2833, in consolidate
bm._consolidate_inplace()
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 2838, in _consolidate_inplace
self.blocks = tuple(_consolidate(self.blocks))
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 3817, in _consolidate
_can_consolidate=_can_consolidate)
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 3840, in _merge_blocks
new_values = _vstack([b.values for b in blocks], dtype)
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 3870, in _vstack
return np.vstack(to_stack)
File "C:\Python34\lib\site-packages\numpy\core\shape_base.py", line 228, in vstack
return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
MemoryError
我尝试 运行在 python 控制台中逐行调用代码,发现错误发生在程序 运行s the sales = sales.drop(['STORE LOCATION'], 轴=1) 线.
我在其他地方搜索了类似的问题,我想到的唯一答案是在程序读取文件时对文件进行分块,如下所示:
#import the original file
df = pd.read_csv('Iowa_Liquor_Sales7.csv', header=0, chunksize=chunksize)
sales = pd.concat(df, ignore_index=True)
我唯一的问题是我得到了这个错误:
Traceback (most recent call last):
File "C:/Users/Aaron/PycharmProjects/DATA/Liquor_Reasign_Pd.py", line 14, in <module>
lat = sales['STORE LOCATION']
TypeError: 'TextFileReader' object is not subscriptable
我的 google-foo 已经全部用完了。有人知道该怎么办吗?
更新
我应该指定使用分块方法,当程序尝试复制存储位置列时会出现错误。
所以我找到了问题的答案。我 运行 python 2.7 中的程序而不是 python 3.4 中的程序。我所做的唯一更改是删除第 8 行,因为它未被使用。不知道是不是2.7只是处理内存问题的方式不一样,还是我在3.4安装的pandas包不对。我将在 3.4 中重新安装 pandas 以查看是否是问题所在,但如果其他人有类似问题,请在 2.7 中尝试您的程序。
UPDATE 意识到我在 64 位机器上是 运行 32 位 python。我升级了我的 python 版本,它现在运行时没有内存错误。
供参考,这都是在 Windows 7 x64 位机器上 PyCharm 教育版 1.0.1,Python 3.4.2 和 Pandas 0.16 .1
我有一个约 791MB 的 .csv 文件,其中约有 304 万行 x 24 列。该文件包含爱荷华州从 2014 年 1 月到 2015 年 2 月的酒类销售数据。如果您有兴趣,可以在此处找到该文件:https://data.iowa.gov/Economy/Iowa-Liquor-Sales/m3tr-qhgy。
其中一列名为商店位置,包含地址,包括纬度和经度。下面程序的目的是从商店位置单元格中取出纬度和经度,并将它们分别放在自己的单元格中。当文件被缩减到约 104 万行时,我的程序正常运行。
1 import pandas as pd
2
3 #import the original file
4 sales = pd.read_csv('Iowa_Liquor_Sales.csv', header=0)
5
6 #transfer the copies into lists
7 lat = sales['STORE LOCATION']
8 lon = sales['STORE LOCATION']
9
10 #separate the latitude and longitude from each cell into their own list
11 hold = [i.split('(', 1)[1] for i in lat]
12 lat2 = [i.split(',', 1)[0] for i in hold]
13 lon2 = [i.split(',', 1)[1] for i in hold]
14 lon2 = [i.split(')', 1)[0] for i in lon2]
15
16 #put the now separate latitude and longitude back into their own columns
17 sales['LATITUDE'] = lat2
18 sales['LONGITUDE'] = lon2
19
20 #drop the store location column
21 sales = sales.drop(['STORE LOCATION'], axis=1)
22
23 #export the new panda data frame into a new file
24 sales.to_csv('liquor_data2.csv')
然而,当我尝试 运行 包含完整 304 万行文件的代码时,它给我这个错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1595, in drop
dropped = self.reindex(**{axis_name: new_axis})
File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 2505, in reindex
**kwargs)
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1751, in reindex
self._consolidate_inplace()
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 2132, in _consolidate_inplace
self._data = self._protect_consolidate(f)
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 2125, in _protect_consolidate
result = f()
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 2131, in <lambda>
f = lambda: self._data.consolidate()
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 2833, in consolidate
bm._consolidate_inplace()
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 2838, in _consolidate_inplace
self.blocks = tuple(_consolidate(self.blocks))
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 3817, in _consolidate
_can_consolidate=_can_consolidate)
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 3840, in _merge_blocks
new_values = _vstack([b.values for b in blocks], dtype)
File "C:\Python34\lib\site-packages\pandas\core\internals.py", line 3870, in _vstack
return np.vstack(to_stack)
File "C:\Python34\lib\site-packages\numpy\core\shape_base.py", line 228, in vstack
return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
MemoryError
我尝试 运行在 python 控制台中逐行调用代码,发现错误发生在程序 运行s the sales = sales.drop(['STORE LOCATION'], 轴=1) 线.
我在其他地方搜索了类似的问题,我想到的唯一答案是在程序读取文件时对文件进行分块,如下所示:
#import the original file
df = pd.read_csv('Iowa_Liquor_Sales7.csv', header=0, chunksize=chunksize)
sales = pd.concat(df, ignore_index=True)
我唯一的问题是我得到了这个错误:
Traceback (most recent call last):
File "C:/Users/Aaron/PycharmProjects/DATA/Liquor_Reasign_Pd.py", line 14, in <module>
lat = sales['STORE LOCATION']
TypeError: 'TextFileReader' object is not subscriptable
我的 google-foo 已经全部用完了。有人知道该怎么办吗?
更新 我应该指定使用分块方法,当程序尝试复制存储位置列时会出现错误。
所以我找到了问题的答案。我 运行 python 2.7 中的程序而不是 python 3.4 中的程序。我所做的唯一更改是删除第 8 行,因为它未被使用。不知道是不是2.7只是处理内存问题的方式不一样,还是我在3.4安装的pandas包不对。我将在 3.4 中重新安装 pandas 以查看是否是问题所在,但如果其他人有类似问题,请在 2.7 中尝试您的程序。
UPDATE 意识到我在 64 位机器上是 运行 32 位 python。我升级了我的 python 版本,它现在运行时没有内存错误。