将多个 CSV 文件(数据集)组合成一个联合文件

Combine multiple CSV files (datasets) to make a joint one

我有 5 个数据集,作为 CSV 文件,它们每个都包含计算机上的事件日志,Monday-Friday。

所以:

Monday.csv
Tuesday.csv
Wednesday.csv
Thursday.csv
Friday.csv

我想知道如何将所有这些合并到一个大文件中,每个数据集的格式都相同,有 80 列,并且在查看这个更大的数据集时跟踪它是一周中的哪一天整整 5 天。

所以所有 5 个 csv 都会变成 1 个更大的,例如:

Week1.csv

这可以用 pandas 实现吗?或者我需要另一个图书馆吗?

更新 Import multiple csv files into pandas and concatenate into one DataFrame 这有助于我做到这一点。

但是 我的 CSV 文件包括第一行作为 header,当我合并它们时,它在文档中包含相同的 header 5 次pdf 的合并,有没有办法在合并它们之前从每个列中删除第一列?

检查 pandas.read_csv 中的参数“header”:用作列名的行号和数据的开头

如果您已经使用它,可以用 Pandas 完成:

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

dfs = (pd.read_csv(day + '.csv').assign(Weekday=day) for day in days)

pd.concat(dfs).to_csv('Week.csv')

但如果没有 Pandas 也可以完成,因为 csv 文件是纯文本文件,您只需要添加列(并且只保留一个 header)。假设分隔符是逗号 (,):

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

# extract one header
with open('Monday.csv', 'b') as fd:
    header = 'Weekday,' + next(fd)
with open('Week.csv', 'w') as fdout:
    fdout.write(header)                            # write the new header
    for day in days:                               # loop over the days
        with open(day + '.csv') as fdin:
            _ = next(fdin)                         # skip header
            for line in fdin:                      # and copy other lines
                fdout.write(day + ',' + line)

这个怎么样?

import pandas as pd
import glob

path = r'C:\your_path_here' # use your path
all_files = glob.glob(path + "/*.csv")

# create list to append to
li = []

# loop through file names in the variable named 'all_files'
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, skiprows=1, header=o)
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

注意:pd.read_csv 有一个参数 skiprows=1

看看这个 link。

https://www.listendata.com/2019/06/pandas-read-csv.html

您不需要 pandas 或任何解析 CSV 文件的东西。只需使用 fileinput.input:

import fileinput

files = ('Monday.csv', 'Tuesday.csv', 'Wednesday.csv', 'Thursday.csv', 'Friday.csv')
with fileinput.input(files=files) as infile, open('Week1.csv', 'w') as outfile:
    for line in infile:
        if fileinput.isfirstline() and fileinput.filename() != files[0]:
            continue        # skip the CSV header line of all files except the first
        print(line, end='', file=outfile)