Создание отдельных pandas DFS из нескольких таблиц на одном листе Excel - PullRequest
1 голос
/ 27 февраля 2020

У меня неправильная настройка, когда у меня несколько таблиц на одном листе Excel. Я пытаюсь сделать каждую таблицу (на одном листе) отдельным pandas фреймом данных. Например, на одном листе Excel у меня может быть:

+--------+--------+--------+--------+--------+--------+-----+
|  Col   |  Col   |  Col   |  Col   |  Col   |  Col   | Col |
+--------+--------+--------+--------+--------+--------+-----+
| Table1 | Table1 |        |        |        |        |     |
|        |        | Table2 | Table2 | Table2 | Table2 |     |
|        | Table3 | Table3 | Table3 |        |        |     |
+--------+--------+--------+--------+--------+--------+-----+

И что мне нужно, так это таблицы, разбитые по типу таблицы (пример ниже - одна из нескольких таблиц в pandas df). Начальный столбец заголовка таблицы уникален для каждой таблицы, поэтому table1 может иметь угловой столбец заголовка столбца с именем: " Leads ", table2 имеет угловой столбец заголовка столбца с именем: " Sales " , а table3 имеет заголовок столбца с именем: " Products ".

+--------+--------+--+
| Leads  | Table1 |  |
+--------+--------+--+
| pd.Data| pd.Data|  |
|        |        |  |
|        |        |  |
+--------+--------+--+

+--------+--------+--------+--------+--+
| Sales  | Table2 | Table2 | Table2 |  |
+--------+--------+--------+--------+--+
| pd.Data| pd.Data| pd.Data| pd.Data|  |
|        |        |        |        |  |
|        |        |        |        |  |
+--------+--------+--------+--------+--+

+---------+---------+---------+--+
| Products| Table3  | Table3  |  |
+---------+---------+---------+--+
| pd.Data | pd.Data | pd.Data |  |
|         |         |         |  |
|         |         |         |  |
+---------+---------+---------+--+

Поскольку я знаю, что pandas преуспеет только при условии, что лист Excel - это одна большая таблица, но с несколькими таблицами я поставил в тупик лучший способ разбить данные на отдельные df, особенно потому, что я не могу индексировать строки или столбцы из-за переменной длины таблиц с течением времени.

Это как далеко Я получил, прежде чем понял, что это работает только для одного стола, а не три:

import pandas as pd
import string
df = pd.read_excel("file.xlsx", usecols="B:I", index_col=3)
print(df)

letter = list(string.ascii_uppercase)

df1 = pd.read_excel("file.xlsx")

def get_start_column(df):
    for i, column in enumerate(df.columns):
        if df[column].first_valid_index():
            return letter[i]

def get_last_column(df):
    columns = df.columns
    len_column = len(columns)
    for i, column in enumerate(columns):
        if df[column].first_valid_index():
            return letter[len_column - i]

def get_first_row(df):
    for index, row in df.iterrows():
        if not row.isnull().values.all():
            return index + 1

def usecols(df):
    start = get_start_column(df)
    end = get_last_column(df)
    return f"{start}:{end}"

df = pd.read_excel("file.xlsx",  usecols=usecols(df1), header=get_first_row(df1)) 
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...