将来自多个 CSV 的特定列合并为一个 CSV

Combine Specific Columns from Multiple CSVs into a Single CSV

我有 67 个 csv 文件,总数据超过 1gb。每个 CSV 包含 20 列,但每个 csv 文件只需要其中的 3 列。我可以成功地将它们全部合并到一个 csv 文件中,但这会创建一个我不需要的庞大文件。相反,我只想将所有 67 个文件中的 3 列合并到一个文件中(当然,只有三列)。

screen capture here

我当前的错误消息是索引超出范围错误,但我不知道如何在此代码中修复它。 这是我正在使用的代码:

import glob
import pandas as pd

path = "C:/Correct/Path"

file_list = glob.glob(path + "/*.csv")

csv_list = []

for file in file_list:
    csv_list.append(pd.read_csv(file, delim_whitespace=1, usecols=[9], engine='python'))

csv_merged = pd.DataFrame()

for csv_file in csv_list:
    
    csv_merged = csv_merged.append(
    csv_file, ignore_index=True)

csv_merged.to_csv('all_counties.csv', index=False)

您可以使用标准库模块轻松编写一个小脚本csv and pathlib

import csv
from pathlib import Path

p = Path('C:/Correct/Path') 

file_list = p.glob("*.csv")

desired_columns = ['foo', 'bar', 'baz']
desired_rows = []

for csv_file in file_list:
    with open(csv_file, 'r') as f:
        reader = csv.DictReader(f)
        for row in reader:
            desired_rows.append({c: row[c] for c in desired_columns})

with open('output.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=desired_columns)
    writer.writeheader()
    writer.writerows(desired_rows)

两个不同csvs的输入:

foo,bar,baz,spam,eggs
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5

foo,baz,bar,spam,eggs,unused
1,2,3,4,5,6
1,2,3,4,5,6
1,2,3,4,5,6
1,2,3,4,5,6
1,2,3,4,5,6

输出:

foo,bar,baz
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,2,3
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2
1,3,2

从那里您可以获得清理后的数据,并且可以根据需要自由使用 pandas。

E: 要从 desired_rows 中删除重复的字典,您有几个选项,具体取决于字典本身。它的一般要点是

new_list = []
for d in desired_rows:
    if d not in new_list: 
        new_list.append(d)