如何使用python以串行方式将多个csv组合成一个文件?

时间:2018-02-08 04:58:49

标签: python python-3.x pandas csv

我正在尝试将多个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文件串行组合?

1 个答案:

答案 0 :(得分:3)

它不是“随机的”(它取决于底层文件系统如何组织这些文件 - @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
)