【问题标题】:How to combine multiple csv into one file in serial manner using python?如何使用python以串行方式将多个csv组合成一个文件?
【发布时间】:2018-07-18 13:44:33
【问题描述】:

我正在尝试将多个 CSV 文件合并为一个 CSV 文件。

CSV 文件是这样的

 Energy_and_Power_Day1.csv,     
 Energy_and_Power_Day2.csv, 
 Energy_and_Power_Day3.csv,      
  ....................., 
 Energy_and_Power_Day31.csv

我使用了一个小的 python 脚本来连接多个 CSV 文件。脚本正在完成它的工作,但它没有以串行方式连接文件。 它应该采取Energy_and_Power_Day1.csv 然后Energy_and_Power_Day2.csv 然后Energy_and_Power_Day3.csv 像这样.. 但不是这样,它随机而不是串行。 这是我的代码

import pandas as pd
import csv
import glob
import os

os.chdir("/home/mayukh/Downloads/Northam_bill_data")
results = pd.DataFrame([])
filelist = glob.glob("Energy_and_Power_Day*.csv")
#dfList=[]
for filename in filelist:
  print(filename)  
  namedf = pd.read_csv(filename, skiprows=0, index_col=0)
  results = results.append(namedf)

results.to_csv('Combinefile.csv')

脚本从print(filename) 提供此输出,并以这种方式组合这些 csv 文件。

Energy_and_Power_Day1.csv
Energy_and_Power_Day16.csv
Energy_and_Power_Day23.csv
Energy_and_Power_Day22.csv
Energy_and_Power_Day11.csv
Energy_and_Power_Day21.csv
Energy_and_Power_Day31.csv
Energy_and_Power_Day17.csv
Energy_and_Power_Day25.csv
Energy_and_Power_Day28.csv
Energy_and_Power_Day9.csv
Energy_and_Power_Day19.csv
Energy_and_Power_Day7.csv
Energy_and_Power_Day15.csv
Energy_and_Power_Day20.csv
Energy_and_Power_Day24.csv
Energy_and_Power_Day4.csv
Energy_and_Power_Day6.csv
Energy_and_Power_Day14.csv
Energy_and_Power_Day13.csv
Energy_and_Power_Day27.csv
Energy_and_Power_Day3.csv
Energy_and_Power_Day18.csv
Energy_and_Power_Day8.csv
Energy_and_Power_Day30.csv
Energy_and_Power_Day12.csv
Energy_and_Power_Day29.csv
Energy_and_Power_Day10.csv
Energy_and_Power_Day5.csv
Energy_and_Power_Day2.csv
Energy_and_Power_Day26.csv

我的问题是如何或以何种方式串行组合这些 CSV 文件?

【问题讨论】:

    标签: python python-3.x pandas csv


    【解决方案1】:

    这不是“随机的”(这取决于底层文件系统如何组织这些文件 - @tripleee)。

    您可以在打开文件之前对文件名进行排序。将list.sortkey 参数一起使用。在此之后,您可以使用列表推导,并将数据帧列表传递给pd.concat。它应该DataFrame.append 更有效。

    import re
    
    filelist = glob.glob("Energy_and_Power_Day*.csv")
    filelist.sort(key=lambda x: int(re.search('\d+', x).group()))
    
    df = pd.concat([
            pd.read_csv(f, skiprows=0, index_col=0) for f in filelist
         ],
         axis=0
    )
    

    【讨论】:

    • 当然也不是字典顺序。 glob 的扩展方式也可能取决于平台。但这可能是匹配项物理存储在目录内部数据结构中的顺序。
    • @COLDSPEED 感谢您的回答。我已经使用您的代码检查它是否按顺序排列所有文件...filelist = glob.glob("Energy_and_Power_Day*.csv") filelist.sort(key=int(re.search('\d+').group(1))) #dfList=[] for filename in filelist: print(filename) 但是python 编译器给了我这个错误`filelist.sort(key=int(re.search('\d+').group())) TypeError: search() missing 1 required positional argument: 'string' 我不知道python re 模块你能帮我我怎么能恢复这个错误?
    • @Prayuktibid 对不起,这是我的错字。请查看我的编辑。
    • @tripleee 够公平的。感谢您的评论,已编辑。
    • @cᴏʟᴅsᴘᴇᴇᴅ 非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 2020-09-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多