python - XLRD 无法读取多索引列名
问题描述
我对多索引列名有疑问。我正在使用 XLRD 将 excel 数据转换为 json,json.dumps
但它只给了我一行列名。我已经阅读了有关多级 json 的信息,但我不知道如何使用 XLRD 来做到这一点。
代码示例:
for i in path:
with xlrd.open_workbook(i) as wb:
print([i])
kwd = 'sage'
print(wb.sheet_names())
for j in range(wb.nsheets):
worksheet = wb.sheet_by_index(j)
data = []
n = 0
nn = 0
keyword = 'sage'
keyword2 = 'adm'
try:
skip = skip_row(worksheet, n, keyword)
keys = [v.value for v in worksheet.row(skip)]
except:
try:
skip = skip_row2(worksheet, nn, keyword2)
keys = [v.value for v in worksheet.row(skip)]
except:
continue
print(keys)
for row_number in range(check_skip(skip), worksheet.nrows):
if row_number == 0:
continue
row_data = {}
for col_number, cell in enumerate(worksheet.row(row_number)):
row_data[keys[col_number]] = cell.value
data.append(row_data)
print(json.dumps({'Data': data}))
顺便说一句,每个工作表在列名之前都有不同的数字要跳过,这就是为什么我的代码具有跳过行的功能。在我跳过该行并找到我的列名的确切位置之后。然后我开始读取值。但是,是的,我认为问题出在哪里,因为我有两行列名。并且仍然混淆如何使用 XLRD 执行多级 json,或者至少将列名与 XLRD 连接起来(我猜不能)。
期望的结果多级 json:
{ "Data":[{ "ID" : "997", "Tax" : [{"Date" : "9/7/2019", "Total" : 2300, "Grand Total" : 340000"}], "Tax ID" : "ST-000", .... }]}
pss:// 我曾尝试使用 pandas,但由于我使用大数据,它给我带来了很多麻烦。
解决方案
您可以在 panda 中使用多索引,首先您需要获取每个工作表的标题行索引。
header_indexes = get_header_indexes(excel_filepath, sheet_index) #returns list of header indexes
您需要编写get_header_indexes
扫描工作表并返回标题索引的函数。
您可以使用 panda 从数据框中获取 JSON。
import pandas as pd
df = pd.read_excel(excel_filepath, header=header_indexes, sheet_name=sheet_index)
data = df.to_dict(orient="records")
对于包含 dict 的多个标题data
列表,并且每个 dict 都有元组作为键,您可以根据您的要求将其重新格式化为最终的 JSON。
注意:chunksize
用于读取大文件。
推荐阅读
- javascript - 使用 SilverStripe 创建具有动态“添加”、“编辑”和“删除”操作的自定义表格
- linux - Bash 脚本错误 0=1:找不到命令
- python - Kivy 应用程序中的图像在填满内存后不显示(显示黑框),未释放
- django - 为什么大括号不适用于 Django 模板中的 Vue 应用程序?
- angular - 角度的承诺和 $q
- procmail - 尽管 X-Spam-Status 分数高于所需垃圾邮件并没有从 mbox 中分类
- python - 基于传递给函数的变量的决策
- http - 伪造 HTTP Get 请求以下载图像
- python - 如何在 Python 中从总体中生成随机样本?
- ios - 从 UIApplication 子类呈现 ViewController