【发布时间】:2021-09-07 05:43:08
【问题描述】:
我正在将 csv 加载到 pandas 数据框中。 csv 为 3.6 gb,我有 64 gb 的内存。加载 3.6gb 文件时,内存怎么可能超过 64gb?
有没有更好的方法来加载不占用太多内存的整个数据帧,或者我的计算机可能有问题。
这是我用来加载 csv 的代码
df = pd.read_csv('../input/ML_DATA.csv')
如果感兴趣,我也可以提供 csv 文件。
这是数据的样例
df = pd.read_csv('../input/ML_DATA.csv', nrows=10)
df.shape -> (10, 4247)
这是一个屏幕截图
这是df.info()的打印件
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Columns: 4247 entries, Location+Type to Pct of housing units in 4+ unit buildings
dtypes: float64(1132), int64(3), object(3112)
memory usage: 99.7+ KB
None
【问题讨论】:
-
你能显示你用来加载 csv 的代码吗?
-
你能分享一下代码吗,也许你正确加载了你的代码,但是在你的脚本执行过程中,你正在复制数据好几次,还要考虑在每个部分运行你的数据,清理你的数据,并更改数据类型。
-
你能分享一行你的csv吗?与 64 位数字类型相比,小整数和浮点数作为 csv 占用的空间更少。字符串列可以转换为分类数据以节省空间。
-
@justanewb 我不认为分享完整的 CSV 会有任何帮助,但如果你能分享一个能很好地代表整个集合的小样本,那将是一个很大的帮助。
-
因为任何 NA 的整数或浮点列在 pandas 中都需要 32 个字节来存储。 告诉我们
df.info(),然后你可以知道每列占用多少内存。将其发布到您的问题中。我们不需要 htop 屏幕截图,只需将其删除即可。告诉我们df.info()。在确定哪些列占用大量内存后,我们可以讨论如何处理(切片不必要的列、按行分块、仅在安全的地方删除/填充 NA 行等)