将来自多个 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)
我有 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)