Объединение данных из нескольких файлов Excel в Python с использованием пакета Pandas - PullRequest
2 голосов
/ 17 апреля 2019

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

This is how the inside of the file looks like This is how the inside of the month folder looks like The inside of the year folder with multiples directoties

Это предназначение для анализа даты и построения различных параметров, т. Е. Temp, atm, GHI e.t.c для количества дней / часов / минут

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)


Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

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

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()
2 голосов
/ 17 апреля 2019

Добавьте каждый файл 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')
...