Объединение данных из нескольких файлов Excel в python с использованием пакета pandas

#python #excel #python-3.x #pandas #data-analysis

#python #excel #python-3.x #pandas #анализ данных

Вопрос:

Я пытаюсь объединить файлы данных Excel с разными датами в один файл, чтобы я мог проводить анализ с помощью пакета pandas. У меня возникают трудности, поскольку файлы названы по датам и имеют несколько листов внутри.

Вот как выглядит внутренняя часть файла
Вот как выглядит внутренняя часть папки месяца
Внутренняя часть папки year с кратными указаниями

Это для задания для анализа даты и построения различных параметров, таких как temp, atm, GHI и т. д., До количества дней / часов / минут

 import pandas as pd
import glob

all_data = pd.DataFrame() #Creating an empty dataframe
for f in glob.glob("/Data-Concentrated Solar Power-NamPower/Arandis 2016/2016 01 January/*.xlsx"): #path to datafiles and using glob to select all files with .xlsx extension
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)


  

Ответ №1:

Добавьте каждый файл DataFrame в список, затем используйте pandas.concat для объединения их всех в один DataFrame :

 import pandas as pd
import glob

frames = []

for f in glob.glob("/home/humblefool/Dropbox/MSc/MSc Project/Data-Concentrated Solar Power-NamPower/Arandis 2016/2016 01 January/*.xlsx"): #path to datafiles and using glob to select all files with .xlsx extension
    df = pd.read_excel(f).assign(file_name=f)
    # Add date column for sorting later
    df['date'] = pd.to_datetime(df.file_name.str.extract(r'(d{4}-d{2}-d{2})', expand=False), errors='coerce')
    frames.append(df)

all_data = pd.concat(frames, ignore_index=True).sort_values('date')
  

Комментарии:

1. Можно ли узнать, как файлы были добавлены в соответствии с их датами и как, возможно, с помощью pandas начинать только со строки 17, используя команды заголовка для всех файлов?

2. Я обновил свой ответ, он будет включать столбец с файлом, из которого был получен фрейм данных

3. Также я понял, что объединенные файлы не расположены в хронологическом порядке их дат, и это приводит к путанице данных, когда я преобразовал сгенерированный файл в файл csv. Есть идеи о том, как это сделать?

4. Я сейчас не за своим столом, но смогу разобраться с этим для вас примерно через 30 минут или около того

5. @Tonikami04 приносим извинения за задержку с ответом. IIUC, вы хотите извлечь date часть из имени файла, чтобы можно было сортировать по этой дате ..? Я обновил свой ответ, чтобы добавить date столбец, используя .str.extract and pd.to_datetime . надеюсь, это то, что вы ищете.

Ответ №2:

Можете ли вы попробовать следующее:

 import os
all_data = pd.DataFrame() #Creating an empty dataframe
for f in glob.glob("/home/humblefool/Dropbox/MSc/MSc Project/Data-Concentrated Solar Power-NamPower/Arandis 2016/2016 01 January/*.xlsx"): #path to datafiles and using glob to select all files with .xlsx extension
    df = pd.ExcelFile(f).parse('Sheet1', skiprows=16)
    file_date = os.path.splitext(os.path.basename(f))[0].split('_')[1]
    df['file_date'] = pd.to_datetime(file_date)
    all_data = pd.concat([all_data, df])
all_data  = all_data.set_index('file_date').sort_index()
  

Комментарии:

1. Это действительно работает. Но насколько я уверен, что файлы объединены вместе в соответствии с их датами?

2. Я пересмотрел решение, чтобы пропустить первые 16 строк. теперь вы можете проверить.

3.Также я понял, что объединенные файлы не расположены в хронологическом порядке их дат, и это приводит к путанице данных, когда я преобразовал сгенерированный файл в файл csv. Есть идеи о том, как это сделать?