python - 如何在 python 中合并大型 csv 文件?
问题描述
我有 18 个 csv 文件,每个文件大约 1.6Gb,每个文件包含大约 1200 万行。每个文件代表一年的数据。我需要合并所有这些文件,提取特定地区的数据,然后分析时间序列。做这个的最好方式是什么?
我已经厌倦了使用 pd.read_csv 但我达到了内存限制。我曾尝试包含一个块大小参数,但这给了我一个 TextFileReader 对象,我不知道如何将它们组合成一个数据框。我也尝试过 pd.concat 但这也不起作用。
解决方案
这是使用 pandas 组合非常大的 csv 文件的优雅方式。该技术是每次迭代将行数(定义为 CHUNK_SIZE)加载到内存中,直到完成。这些行将以“附加”模式附加到输出文件。
import pandas as pd
CHUNK_SIZE = 50000
csv_file_list = ["file1.csv", "file2.csv", "file3.csv"]
output_file = "./result_merge/output.csv"
for csv_file_name in csv_file_list:
chunk_container = pd.read_csv(csv_file_name, chunksize=CHUNK_SIZE)
for chunk in chunk_container:
chunk.to_csv(output_file, mode="a", index=False)
但是,如果您的文件包含标题,那么跳过除第一个文件之外的后续文件中的标题是有意义的。由于重复标题是出乎意料的。在这种情况下,解决方案如下:
import pandas as pd
CHUNK_SIZE = 50000
csv_file_list = ["file1.csv", "file2.csv", "file3.csv"]
output_file = "./result_merge/output.csv"
first_one = True
for csv_file_name in csv_file_list:
if not first_one: # if it is not the first csv file then skip the header row (row 0) of that file
skip_row = [0]
else:
skip_row = []
chunk_container = pd.read_csv(csv_file_name, chunksize=CHUNK_SIZE, skiprows = skip_row)
for chunk in chunk_container:
chunk.to_csv(output_file, mode="a", index=False)
first_one = False
推荐阅读
- swift - 在 UILongPressGestureRecognizer 中的 .state == .began 末尾触发不需要的“CANCEL”事件
- json - 将核心数据条目标记为收藏夹 SWIFTUI
- c++ - 如何在命令设计模式中处理多个接收器和多个命令?
- r - R 中 4.0.4 版本的匹配函数
- javascript - 导航手机无法打开(mobile-nav-toggle)
- javascript - 如何在打字稿中使用库
- c# - 发布到 Teams webhook 时 AdaptiveCard 400 错误请求 C#
- python - 使用 plotly-dash 为 pandas 数据框绘制交互式图形会引发回调错误更新输出
- html - 做什么
% 以 CSS 长度表示,例如 100%25 - python - 在 pygame 中播放音频的问题