【问题标题】:Combine multiple CSV files (datasets) to make a joint one将多个 CSV 文件(数据集)组合成一个联合文件
【发布时间】:2021-03-02 00:39:12
【问题描述】:

我有 5 个数据集,作为 CSV 文件,每个数据集都包含周一至周五计算机上的事件日志。

所以:

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

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

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

Week1.csv

熊猫可以做到这一点吗?还是我需要另一个库?

更新 Import multiple csv files into pandas and concatenate into one DataFrame这对我有帮助。

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

【问题讨论】:

标签: python pandas dataframe csv jupyter


【解决方案1】:

这个怎么样?

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 的参数

查看此链接。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果您已经使用过 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 文件是纯文本文件,您只需要添加列(并且只保留一个标题)。假设分隔符是逗号 (,):

      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)
      

      【讨论】:

        【解决方案4】:

        您不需要 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)
                 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-03
          • 2017-09-25
          • 1970-01-01
          • 2019-10-11
          • 2012-12-08
          • 1970-01-01
          • 1970-01-01
          • 2020-11-12
          相关资源
          最近更新 更多