【问题标题】:How can a csv that is 3.6 gb take up all my memory of 64gb一个 3.6 GB 的 csv 怎么会占用我所有的 64 GB 内存?
【发布时间】: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 行等)

标签: python pandas


【解决方案1】:

您的计算机没有问题。您正在经历与存储数据相关的开销。

这些值中的每一个都可能在您的计算机中存储为 64 位值,但存储为字符串的列被存储为 python 对象,这将更像是每个单元格 240 字节。

所以删除你不需要的列,启用交换,如果你想变得更漂亮,学习如何使用 Dask。

另外,顺便说一句,如果你把整个表放到 SQLlite3 数据库中,会容易很多。

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2011-02-13
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多