如何将多个Excel文件按数字顺序(file1.xls,file2.xls等)编译为一个python文件?

时间:2019-07-10 15:11:07

标签: python excel pandas glob

我正在尝试将几个.xls文件一起编译。我发现一些代码可以正常工作,但是却使文件混乱。这些文件的名称为therm_sensor1.xls,therm_sensor2.xls等。我需要将输出按数字顺序排列,但是我的当前代码似乎将它们弄乱了。我是计算机编码的新手,所以进行解释会有所帮助:) 此外,我的当前输出具有除前6行之外的所有数据。我不知道为什么要这么做。

import pandas as pd
import glob

glob.glob('therm_sensor*.xls')

all_data = pd.DataFrame()
for f in glob.glob('therm_sensor*.xls'):
    df = pd.read_excel(f)
    all_data = all_data.append(df, ignore_index=True)

print(all_data.to_string())

输出:

6    1.739592e-05  0.30           NaN

7    2.024840e-05  0.35           NaN

8    2.309999e-05  0.40           NaN

...

502  2.949562e-10  0.95           NaN

503  3.113220e-10  1.00           NaN

3 个答案:

答案 0 :(得分:0)

阅读或排序后附加的顺序是否有问题? 对于第一个,简单的文件列表排序就可以解决问题,而对于后来的一个简单的解决方案,就是添加一个增量索引列

答案 1 :(得分:0)

这里的问题是(可能)是由于人和计算机对事物进行排序的方式不同。像这样的列表:

files = ['file10.xls', 'file2.xls', 'file1.xls']

计算机以一种看起来不直观的方式对列表进行排序(因为它进入1102):

>>> sorted(files)
['file1.xls', 'file10.xls', 'file2.xls']

但是,如果您更改排序标准,则可以获得更直观的结果。在这里,这意味着隔离文件名中包含数字的部分并将其转换为整数,以便计算机可以对其进行正确排序:

>>> sorted(files, key=lambda s: int(s[4:-4]))
['file1.xls', 'file2.xls', 'file10.xls']

在您的用例中,这应该可以解决问题:

sorted(glob.glob('therm_sensor*.xls'), key=lambda s: int(s[12:-4]))

答案 2 :(得分:0)

我遇到了类似的问题,最终,我找到了解决方法。因此,我将为您提供对我有用的解决方案。我做的一件事是在传递给数据框之前给列名命名。看看是否有帮助。

fileList=glob.glob("*.csv")
    dfList=[]
    colnames=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34]
    for filename in fileList:
        print(filename)
        df=pd.read_csv(filename, header=None)
        dfList.append(df)
    concatDf=pd.concat(dfList, axis=0)
    concatDf.columns=colnames
    #concatDf.to_csv(outfile, index=None) -# You dont need this. 
concatenate()