我有一个中等大小的csv文件,大约100MB。它包含20,000行。
由于某些原因,我无法执行以下操作:
ubuntu@ip-172-31-42-52:~/sunshine(XXX)$ python
Python 3.10.5 (main, Oct 1 2022, 00:47:42) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> df = pd.read_csv('/home/ubuntu/XXX_dataset__full.csv')
>>> df.memory_usage()
Index 128
url 160000
FOO 160000
BAR 160000
text 160000
dtype: int64
>>> docs = df['text'].values.astype(str)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
numpy.core._exceptions._ArrayMemoryError: Unable to allocate 256. GiB for an array with shape (20000,) and data type <U3430166
>>> quit()
字符串
我的ubuntu上的可用RAM:
MemTotal: 129196996 kB
型
为什么numpy要估算这么多内存?
1条答案
按热度按时间ogq8wdun1#
“and data type <U3430166”表示
text
列中至少有一行包含3430166个字符的字符串。NumPy字符串数组需要为每行分配相同的空间,每个字符4个字节,因此它需要为您尝试创建的20000行数组的 * 每一行 * 分配3430166*4个字节。这大约是256 GiB或274 GB,是可用RAM的两倍。请注意,原始数据框的
text
列没有NumPy字符串数组支持。它由一个对象数组支持,保存对普通Python字符串对象的引用。默认情况下,memory_usage
不会报告字符串对象消耗的内存。