pandas - 使用大量 RAM 将 GeoPandas 写入 to_CSV
问题描述
我有一个 ~500Mb 的 csv 文件,我通过 pandas 加载并转换为 geoPandas。
thisData = pd.read_csv(myFile1.csv, encoding='utf-8').fillna(0)
thisData['geometry'] = thisData['geometry'].apply(wkt.loads)
thisData.crs = 'epsg:4326'
完成后,它会将我计算机内存的 10% 用于 210,134 行和 14 列。数据是整数列或字符串,并且有空单元格。
然后我过滤掉一些数据到 195,209 行。
现在我只想将缩小的文件写入我的驱动器
thisData.to_csv(myFile2.csv, sep=',', encoding='utf-8-sig', index=False, chunksize=10000)
当我这样做时,内存使用量迅速攀升至 32GB 的 99% 并且永远不会完成。我处理过许多较大的文件,但从未遇到过这个问题,因此该数据的某些功能可能会导致问题。我试着不NaN->0
认为这是混合数据类型的问题,但我遇到了同样的问题。
所以现在它只是抛出了MemoryError: Unable to allocate 21.3 GiB for an array with shape (1, 10000) and data type <U572360
,但显然对于这种大小的数据框来说这不是必需的,更不用说这种大小的块了。
有没有将 geopandas 文件写入 csv 的经验的人对导致这种内存爆炸的原因有任何暗示?
解决方案
推荐阅读
- python - 更改线图 pandas/matplotlib 中特定线的线宽
- python - 如果将数字转换为字符串,则使用 find_one 时 Pymongo 不返回值
- r - 仅保留数据框中的某些列,前提是它们符合条件
- java - Thymeleaf 控制器不渲染
- node.js - React Create-react-app 问题,卡在我的一台电脑上安装并在另一台电脑上顺利运行
- python - plotly 中的保留热图
- java - 如何在 Intellij 中使用 bean 创建基本的 Spring 应用程序
- javascript - getElementByClassName 不适用于 addEventListener
- android - 在 Anbox 中为 Android 提供位置信息 (GPS)
- php - 如何更新我的数组并在 codeigniter 中返回