我正在尝试将多个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文件串行组合?
答案 0 :(得分:3)
它不是“随机的”(它取决于底层文件系统如何组织这些文件 - @tripleee)。
您可以在打开文件之前对文件名进行排序。将list.sort
与key
参数一起使用。在此之后,您可以使用列表推导,并将数据帧列表传递给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
)