首页 > 解决方案 > 读取大型 CSV 并将其拆分为更小的块

问题描述

我正在尝试使用 python 读取和分析一个大型 csv 文件(11.5 GB)。然后使用 Power BI 围绕它创建一些视觉效果。但是每次我在 Power BI 中运行任何命令行甚至更改数据框时,每次更改之间大约需要 20-30 分钟。

列标题之一是DeviceID. 我想将大型 CSV 拆分为多个 csv 文件,以便每个文件都有属于一个唯一 DeviceID值的数据。

目前,单个Full.csv文件中的数据框如下所示:

DeviceID    AreaName     Longitude    Latitude
12311       Dubai        55.55431     25.45631
12311       Dubai        55.55432     25.45634
12311       Dubai        55.55433     25.45637
12311       Dubai        55.55431     25.45621
12309       Dubai        55.55427     25.45627
12309       Dubai        55.55436     25.45655
12412       Dubai        55.55441     25.45657
12412       Dubai        55.55442     25.45656

运行代码后,单个Full.csv文件应生成 3 个 csv 文件:12311.csv, 12309.csv12412.csv每个文件如下所示:

DeviceID    AreaName     Longitude    Latitude
12311       Dubai        55.55431     25.45631
12311       Dubai        55.55432     25.45634
12311       Dubai        55.55433     25.45637
12311       Dubai        55.55431     25.45621

DeviceID    AreaName     Longitude    Latitude
12309       Dubai        55.55427     25.45627
12309       Dubai        55.55436     25.45655

DeviceID    AreaName     Longitude    Latitude
12412       Dubai        55.55441     25.45657
12412       Dubai        55.55442     25.45656

我读到在 python 中处理大文件的最佳方法是使用 pandasql 模块。我可以使用 pandsql 实现我上面描述的吗?

谢谢

标签: pythonsqlpandascsvpandasql

解决方案


如果 python 不是强制性的,您可以使用 Miller ( https://github.com/johnkerl/miller )。

从...开始

DeviceID,AreaName,Longitude,Latitude
12311,Dubai,55.55431,25.45631
12311,Dubai,55.55432,25.45634
12311,Dubai,55.55433,25.45637
12311,Dubai,55.55431,25.45621
12309,Dubai,55.55427,25.45627
12309,Dubai,55.55436,25.45655
12412,Dubai,55.55441,25.45657
12412,Dubai,55.55442,25.45656

并运行

mlr --csv --from input.csv put -q 'tee > $DeviceID.".csv", $*'

你将拥有这 3 个文件

#12311.csv
DeviceID,AreaName,Longitude,Latitude
12311,Dubai,55.55431,25.45631
12311,Dubai,55.55432,25.45634
12311,Dubai,55.55433,25.45637
12311,Dubai,55.55431,25.45621

#12412.csv
DeviceID,AreaName,Longitude,Latitude
12412,Dubai,55.55441,25.45657
12412,Dubai,55.55442,25.45656

#12309.csv
DeviceID,AreaName,Longitude,Latitude
12309,Dubai,55.55427,25.45627
12309,Dubai,55.55436,25.45655

推荐阅读