gpt4 book ai didi

python - 如何使用 Pandas 只读取 excel 标题?

转载 作者:行者123 更新时间:2023-12-04 19:50:29 27 4
gpt4 key购买 nike

我知道用 pandas 读取 excel 表格:

import pandas as pd

table = pd.read_excel(io)

加载数据后,如果要获取表头:

table.columns

这种方法是可行的,但是有时候只想直接获取excel表格的表头,尤其是当excel表格body size比较大的时候,将数据表格加载到内存中会非常耗时&也是没必要的,有时候甚至会直接溢出卡住。看官方文档,好像可以用nrows参数来指定只读取Excel的特定行,也就是说我可以用它只读取第一行标题:

header = pd.read_excel(io, nrows = 0)

但是我发现也不能阻止pandas读取整个excel数据,而且还是会消耗大量的时间和内存。你有处理这个问题的好经验吗?

最佳答案

sheet_rows这个函数直接使用了openpyxl,而不是pandas;它比 read_excel( nrows=0 ) 快得多,而且简单:

#!/usr/bin/env python3

import openpyxl # https://openpyxl.readthedocs.io

#...............................................................................
def sheet_rows( sheet, nrows=3, ncols=None, verbose=5 ) -> "list of lists":
""" openpyxl sheet -> the first `nrows` rows x `ncols` columns
verbose=5: print A1 .. A5, E1 .. E5 as lists
"""
rows = sheet.iter_rows( max_row=nrows, max_col=ncols, values_only=True )
rows = [list(r) for r in rows] # generator -> list of lists
if verbose:
print( "\n-- %s %d rows %d cols" % (
sheet.title, sheet.max_row, sheet.max_column ))
for row in rows[:verbose]:
trimNone = list( filter( None, row[:verbose] ))
print( trimNone )
return rows


# xlsxin = sys.argv[1]
wb = openpyxl.load_workbook( xlsxin, read_only=True )
print( "\n-- openpyxl.load_workbook( \"%s\" )" % xlsxin )

for sheetname in wb.sheetnames:
sheet = wb[sheetname]

rows = sheet_rows( sheet, nrows=nrows )

df = (pd.DataFrame( rows ) # index= columns=
.dropna( axis="index", how="all" )
.dropna( axis="columns", how="all" )
)
print( df )
# df.to_excel df.to_csv ...

pyexcel下的“部分阅读”说明大多数 Excel 阅读器在做任何其他事情之前将所有数据读入内存——很慢。openpyxl iter_rows() 快速获取几行或几列,内存不知道。

关于python - 如何使用 Pandas 只读取 excel 标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60879718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com