我有一个非常大量的csv文件,我需要合并成一个单一的。由于内存限制,我不能创建一个列表并在以后进行连接,即使我有64GB的RAM。
为了避免将所有内容保存到内存中,我使用以下命令将数据流式传输到文件中:
entidad_csv = folder_entidad / f"{entidad.name.lower()}.csv"
for f in tqdm(files):
df = descomprime(f)
df.to_csv(entidad_csv, index=False, mode="a", header=not entidad_csv.exists())
但是,当某个文件中缺少一列时,我遇到了问题,因为它按原样追加了行。我不知道之前的手,其中列是目前在每个文件,所以我需要合并的文件有每一列。
先谢谢你了
2条答案
按热度按时间watbbzwu1#
您可以尝试根据读取的文件创建一个列列表,并使其成为一个仅带头的空白数据框,然后使用空白数据框与新的csv文件连接。它将创建一个新的dataframe,其中包含文件中的所有列。
zsohkypk2#
IIUC,您可以使用以下逻辑:
Index.union
:在标头之间形成唯一的组合insert_line_front
:在每次迭代时替换/覆盖标头reindex
:生成低于缺失列的NaN值测试/输出:
file1.csv
:file2.csv
:file3.csv
:merged.csv
(* 以表格形式 *):| col1| col3| col4| col5| col2|
| - -----|- -----|- -----|- -----|- -----|
| 福|||||
| 酒吧|||||
| qux|||||
| | 乌|3.0|||
| | WW| 4.0|||
| 巴兹|||ii| 5.0|
| qux|||jj| 6.0|