首页 > 解决方案 > IndexError: 使用 pandas 将单个 excel 行导出到 JSON 文件时,索引 1 超出轴 0 的范围,大小为 1

问题描述

例如,我有一个包含 100 行的电子表格,并且希望将每一行导出到一个名为 <行号>.json 的单个 JSON 文件。
但是我收到此错误,并且不确定我可能做错了什么。
代码如下:

import pandas as pd
from pathlib import Path
from pandas import read_excel


root_location = Path("/fullpath/")
df = pd.read_excel("/fullpath/toexcelfile.xlsx") 
rowNumber = 0

for index, row in df.iterrows():
    with open(root_location / (str([rowNumber]) + ".json"), "w") as f:
        f.write(str(row[rowNumber]))
        rowNumber +=1

非常感谢你的帮助。

编辑:

我试过了

import pandas as pd
from pathlib import Path
from pandas import read_excel

df = pd.read_excel("/fullpath/excel.xlsx", index=[0, 1], columns=['A']) 

for index, row in df.iterrows():
    with open((str([index]) + ".json"), "w") as f:
        f.write(row.to_string(row))
        

现在给我以下错误:


TypeError: read_excel() got an unexpected keyword argument 'index'

标签: pythonpandasdataframe

解决方案


您正在尝试访问超出行中数组边界的索引row,您f.write(str(row[rowNumber]))正在尝试访问.rowNumberrow

您已经拥有该行,for并且row[rowNumber]您没有访问第rowNumber-th 行,但是rowNumber当前行的第 -th 元素,如果数据格式不正确,这可能会导致索引超出范围,如我们所见。

总之,在每次迭代中,for您都在访问元素row[rowNumber],但每次都将row和递增rowNumber1;通过这个我们可以说程序只会考虑dataframe(即[0,0],[1,1],...,[n,n])的对角线的值。

由于您必须导出每一行,您可以执行类似于下面简化示例的操作,仅使用row给定的 from iterrows()

import pandas as pd

df = pd.DataFrame((['Value0', 'Value1'],['Value2', 'Value3']), index=[0, 1], columns=['A', 'B'])
#   |    A   |    B   |
# 0 | Value0 | Value1 |
# 1 | Value2 | Value3 |

for column, row in df.iterrows():
    with open((str([column]) + ".txt"), "w") as f:
        f.write(str(row))

输出:

[0].txt

A    Value0
B    Value1
Name: 0, dtype: object

[1].txt

A    Value2
B    Value3
Name: 1, dtype: object

编辑更新的问题

你有一个TypeError因为read_excel()不接受与构造函数相同的参数DataFrame()。要处理这个问题,您需要阅读 excel 文件并dataframe根据您的需要格式化。由于我不知道该文件的确切格式,因此无法提供确切的解决方案。我能做的最好的就是让你参考解释这个问题的每一个论点的文档。

此外,只是一个提示,我建议您打印一个虚拟dataframe模型作为实际模型的示例,以便更好地理解如何正确处理它


推荐阅读