#python #excel #python-3.x #pandas #data-analysis
#python #excel #python-3.x #pandas #анализ данных
Вопрос:
Я пытаюсь объединить файлы данных Excel с разными датами в один файл, чтобы я мог проводить анализ с помощью пакета pandas. У меня возникают трудности, поскольку файлы названы по датам и имеют несколько листов внутри.
Это для задания для анализа даты и построения различных параметров, таких как 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
andpd.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. Есть идеи о том, как это сделать?