我试图读取一个34Gb的Stata(.dta)文件,但不断得到一个“MemoryError”消息,很明显,我的16Gb内存是不够的。
我尝试测试一个11Mb的Stata文件:
dtafile = 'E:/test file.dta'
df = pd.read_stata(dtafile)
a = df.head()
print(a)
我得到的正确输出为:
app_id inventor_id ... lagged_generality_FYnormalized _merge
0 101985 ... 1.038381 matched (3)
1 102019 SCHOTTEK 2827 ... 0.830110 matched (3)
2 102019 KUELLMER 2827 ... 0.830110 matched (3)
3 102019 DICKNER 2827 ... 0.830110 matched (3)
4 102562 VINEGAR 986 ... 0.825088 matched (3)
[5 rows x 1448 columns]
Process finished with exit code 0
但是当我用34GB文件尝试同样的操作时,我得到了一个“MemoryError”消息。完整的错误消息是:
Traceback (most recent call last):
File "C:\Users\Gaju\PycharmProjects\first project\work.py", line 8, in <module>
df = pd.read_stata(dtafile)
File "C:\Users\Gaju\PycharmProjects\first project\venv\lib\site-packages\pandas\util\_decorators.py", line 317, in wrapper
return func(*args, **kwargs)
File "C:\Users\Gaju\PycharmProjects\first project\venv\lib\site-packages\pandas\io\stata.py", line 2021, in read_stata
reader = StataReader(
File "C:\Users\Gaju\PycharmProjects\first project\venv\lib\site-packages\pandas\io\stata.py", line 1172, in __init__
self.path_or_buf = BytesIO(handles.handle.read())
MemoryError
Process finished with exit code 1
2条答案
按热度按时间pcww981p1#
从表面上看,Pandas的Stata解析器目前总是将整个文件读入内存(并将其转换为内存流)。
这显然是一种倒退--如果我正确地阅读this diff,那么解析器以前只能使用来自磁盘的文件流。
**EDIT:**无独有偶,最近有人提出了一个关于这个的bug报告:https://github.com/pandas-dev/pandas/issues/48700
**编辑2:**我想我也可以尝试修复这个问题。https://github.com/pandas-dev/pandas/pull/48922
**编辑3:**一年后的一个季度,我的PR被合并到Pandas2.0中。
cczfrluj2#
有几个库可以与panda无缝地工作(即允许您使用传统的panda API),但针对大文件进行了优化
这是一个link
此外,如果你不想读这篇文章,只是尝试