Python / pandas Для L oop с Excel, объединить несколько рабочих книг (один столбец) в список поиска - PullRequest
0 голосов
/ 28 января 2020

Я могу заставить это работать в Excel VBA, но не python ...

Цените, если кто-то может помочь! Это то, что у меня есть.

Имя столбца «Поиск» - это общий индекс, который я объединяю.

import pandas as pd
import os

l = []
for root, dirs, files in os.walk(r"D:/"):
    for file in files:
        if file.endswith(".xlsx"):
             l.append(os.path.join(root, file))


search = 'Search List.xlsx'
source = pd.read_excel(open(search,'rb'), sheet_name=0)
source.set_index("Search", inplace = True)


for i in range(0, len(l)):
    path = l[i]
    df = pd.read_excel(open(path,'rb'), sheet_name=0)
    df.rename(columns={ df.columns[3]: "Search" }, inplace = True)
    df.set_index("Search",inplace = True)

final = pd.merge(source, df, on = ['Search'], how = 'left')

Os.walk дает мне путь к файлам заканчивая xlsx, и создает список?


['D: / Search \ Find List 1.xlsx', 'D: / Search \ Find List 2.xlsx', 'D: / Search \ Find List 3.xlsx ',' D: / Search \ Find List 4.xlsx ']


Когда у меня есть список путей, мне нужно открывать по одному за раз, объединять с " Источник "Список, соответствующий поиску столбцов. Один за другим, мне нужно объединить оставшийся файл Excel. Имеет ли это смысл?

Как мне для l oop прочитать Excel, объединить соответствующие столбцы и перейти к следующей итерации списка.

Я так чертовски запутался

Спасибо за помощь!

1 Ответ

1 голос
/ 28 января 2020

Нашел решение по предложению Сэмми. Я объединяю все файлы Excel в списке, затем корректирую данные как необходимые перед объединением с исходным списком поиска.

import pandas as pd
import os

l = []


for root, dirs, files in os.walk(r"D:/Search"):
    for file in files:
        if file.endswith(".xlsx"):

                df = pd.read_excel(open(file,'rb'), sheet_name=0, header = 0)
                df.rename(columns={ df.columns[3]: "Search" }, inplace = True)
                df["Path"] = file
                l.append(df)

frame = pd.concat(l, axis=0, ignore_index=True)
frame = frame.drop([frame.columns[0] , frame.columns[1], frame.columns[2], frame.columns[4]],  axis='columns')
frame.set_index("Search",inplace = True)


search = 'Search List.xlsx'
source = pd.read_excel(open(search,'rb'), sheet_name=0)
source.set_index("Search", inplace = True)



final = pd.merge(source, frame, on = ['Search'], how = 'left')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...