将多个 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。
您不需要 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)
我有 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。
您不需要 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)