python - 读取大型 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.csv
,12412.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 实现我上面描述的吗?
谢谢
解决方案
如果 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
推荐阅读
- mysql - 了解 SQL 别名
- fortran - 警告 #10145 没有对文件“A.obj”执行任何操作
- python - pip-18.0 出现“找不到日志记录模块”错误
- javascript - 如何根据两个数字范围获取 0 - 1 的范围
- git - 包含新子模块的 Git 拉取分支
- java - 日志记录:在 Spring Boot 中使用属性文件实现 Log4j2
- kubernetes - 无法让 Traefik 使用 Kubernetes 在 Centos 7.5 上工作
- objective-c - 在 Cocoa App 中将多行标题设置为 NSButton
- mongodb - 使用错误 ID 存储的嵌入式根对象
- python - 当我使用python自动知道应用程序名称时,如何在任务管理器中找到任务名称?