繁体   English   中英

如何在不循环所有单元格的情况下将 openpyxl 单元格的范围转换为 pandas 数据框?

[英]How do I convert range of openpyxl cells to pandas dataframe without looping though all cells?

Openpyxl 支持将 excel 2010 工作簿的整个工作表转换为 pandas 数据框。 我想使用 Excel 的本机索引选择这些单元格的子集,并将该单元格块转换为数据框。 Openpyxl 关于使用 pandas 的文档没有帮助: https ://openpyxl.readthedocs.io/en/stable/pandas.html

我试图避免 1)循环遍历数据中的所有行和列,因为这效率低下 2)在创建后从数据框中删除这些单元格,以及 3)Pandas 的 read_excel 模块,因为它似乎不支持指定范围在 Excel 的本机索引中。

#This converts an entire workbook to a pandas dataframe
import pandas as pd
import openpyxl as px

Work_Book = px.load_workbook(filename='MyBook.xlsx')
Work_Sheet = Work_Book['Sheet1']
df = pd.DataFrame(Work_Sheet.values)

#This produces a tuple of cells. Calling pd.DataFrame on it returns
#"ValueError: DataFrame constructor not properly called!"
Cell_Range = Work_Sheet['B2:D4']

#This is the only way I currently know to convert Cell_Range to a Pandas 
# DataFrame. I'm trying to avoid these nested loops.
row_list = []
for row in Cell_Range:
    col_list = []
    for col in row:
        col_list.append(col.value)
    row_list.append(col_list)
df = pd.DataFrame(row_list)

我试图找到将上面的 Cell_Range 对象转换为 pandas 数据框的最有效方法。 谢谢!

Work_Sheet.values 会给你一个生成器。 将其转换为列表以生成元组列表,第一个元组具有标题。 要将其转换为数据框,请执行以下操作:

df = pd.DataFrame(list(Work_Sheet.values))
df.columns = df.iloc[0,:]
df = df.iloc[1:,].reset_index(drop=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM