Как скомпилировать несколько файлов Excel в числовом порядке (file1.xls, file2.xls и т. Д.) В один файл Python? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь собрать несколько файлов .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 голосов
/ 10 июля 2019

Проблема здесь (вероятно) из-за разницы в способах людей и компьютеров сортировать вещи. Возьмите такой список:

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]))
0 голосов
/ 10 июля 2019

У меня была похожая проблема, в конце концов, я нашел способ. Поэтому я дам вам решение, которое сработало для меня. Одной из ключевых вещей, которые я сделал, было присвоение имен столбцам перед передачей данных. Посмотрите, поможет ли это.

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()
0 голосов
/ 10 июля 2019

Проблема с порядком добавления или прочтения постов? В первом случае простая сортировка списка файлов поможет, а в дальнейшем простым решением будет добавить столбец инкрементного индекса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...