我有一个不正常的设置,在同一张excel表格上有多个表格。我试图使每个表(在同一张纸上)成为一个单独的数据框。例如,在一张excel表格上,我可能有:
+--------+--------+--------+--------+--------+--------+-----+
| Col | Col | Col | Col | Col | Col | Col |
+--------+--------+--------+--------+--------+--------+-----+
| Table1 | Table1 | | | | | |
| | | Table2 | Table2 | Table2 | Table2 | |
| | Table3 | Table3 | Table3 | | | |
+--------+--------+--------+--------+--------+--------+-----+
我想要的是按表类型划分的表(下面的示例是一个df中的多个表之一)。每个表的表头开始列都是唯一的, 因此,表1可能会将列标题角列命名为: “导联”, 表2的列标题角列名为: “销售”, 表3的列标题名为: “产品”
+--------+--------+--+
| 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)
目前没有回答
相关问题 更多 >
编程相关推荐