我正在尝试将几个.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
答案 0 :(得分:0)
阅读或排序后附加的顺序是否有问题? 对于第一个,简单的文件列表排序就可以解决问题,而对于后来的一个简单的解决方案,就是添加一个增量索引列
答案 1 :(得分:0)
这里的问题是(可能)是由于人和计算机对事物进行排序的方式不同。像这样的列表:
files = ['file10.xls', 'file2.xls', 'file1.xls']
计算机以一种看起来不直观的方式对列表进行排序(因为它进入1
,10
,2
):
>>> 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()