Использование панд для объединения данных из файла Excel - PullRequest
0 голосов
/ 16 ноября 2018

Итак, в настоящее время я работаю над проектом, который выплевывает файлы Excel, содержащие данные для создания спектров (то есть длину волны в одном столбце, поглощение в другом). Существуют сотни файлов Excel этой природы, и я хочу сжать их в один файл. Это происходит главным образом потому, что столбец A (длина волны) идентичен для всех файлов, и только шансы поглощения между файлами. Поэтому я хотел бы взять столбцы A и B из первого файла в каталоге, записать их в новый лист Excel, затем взять только столбец B из всех оставшихся листов и распечатать их в тот же выходной файл Excel. Код, который у меня сейчас есть:

import os
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import glob
import numpy as np

def xlxtract():
    for filename in glob.glob('*.xlsx'):
    ExcelFile = filename[:-5]
    RosewoodData = pd.read_excel(ExcelFile + '.xlsx')
    Row = RosewoodData.values.tolist()
    ColDataFrame = pd.DataFrame({'Wavelength (nm)': [ x[0] for x in Row], 'Absorbance':[ x[1] for x in Row]})        
    Writer = ExcelWriter(filename[:-5] + 'TEST' + '.xlsx')
    ColDataFrame.to_excel(Writer, 'Sheet1', index=False)
    Writer.save()

xlxtract()

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

Я более чем рад сам разобраться в этом вопросе, если кто-нибудь может даже указать мне правильное направление на то, на что следует обратить внимание, но решения этого тоже хороши.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Я полагаю, что, как упоминалось выше @Rahul, вам нужна функция merge .С его помощью вы можете легко комбинировать кадры данных на основе общего столбца.Вы можете увидеть больше информации здесь .Кроме того, для вашего конкретного случая, я думаю, что-то в этом роде должно помочь:

import os
import pandas as pd
import glob
import numpy as np

def xlxtract():

    masterDf = pd.DataFrame(columns=["Wavelength (nm)"])
    minorDf = pd.DataFrame(columns=["Wavelength (nm)", "Absorvance"]) 

    for filename in glob.glob('*.xlsx'):

        minorDf = pd.read_excel(filename)

        masterDf = minorDf.merge(masterDf, how = 'outer', on= "Wavelength (nm)")

    masterDf.to_excel("result.xlsx")
0 голосов
/ 16 ноября 2018

Вы, вероятно, могли бы сделать что-то вроде этого:

import pandas as pd
import glob

filelist = glob.glob('*.xlsx')
df_list = []

for file in filelist:
    df_temp = pd.read_excel(file, index_col=0)
    df_list.append(df_temp)

df = pd.concat(df_list)
df.to_excel('output.xlsx')

Это считывает все файлы Excel в отдельный DataFrame с первым столбцом (длиной волны) в качестве индекса.После того как все фреймы данных созданы, pd.concat объединяет их в 1 фрейм данных со столбцом длины волны в качестве ключа соединения.

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