类型错误:'float'对象在 openpyxl 函数dataframe_to_rows中不可下标



我正在使用openpyxl库中的dataframe_to_rows函数。我正在尝试将数据帧写入现有的带有格式的空白工作表中。然而,我得到了以下错误:TypeError:"float"对象不是可下标的

以下是相同的代码:

import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows
def copy_dataframe_to_file(file_path, df, sheet_name):
    wb = openpyxl.load_workbook(file_path)
    ws = wb[sheet_name]
    rows = dataframe_to_rows(df)    
    for r_idx, row in enumerate(rows, 1):
        for c_idx, value in enumerate(row, 1):
            ws.cell(row=r_idx, column=c_idx, value=value)
    ws.save(file_path)

Error Message Here: 
row = [data[j][idx] for j in range(ncols)] 
TypeError : 'float' object is not subscriptable

row=[data[j][idx]for j in range(ncols(]来自库文件openpyx.utils.dataframe.py。我不明白"浮子"是从哪里来的。

出于测试目的,我在openpyx.utils.dataframe.py中的行row=[data[j][idx]For j in range(ncols(]之前添加了一条print语句,以获取data[j]和data[j][idx]的值。

所以data[j]基本上等同于数据帧/表中的列,它的类型是list(字符串列表(,data[j][idx]是列中第一行的值。我能够打印出第一栏。当下一列是dataframe_to_rows的浮点列表(实际上是整数列表,但已转换为浮点列表(时,问题就开始了。这就是发生上述错误的地方。

在将整个数据帧传递给dataframe_to_rows之前,我通过下面的行将其转换为字符串类型。

df = df.to_string()
rows = dataframe_to_rows(df)  

这样,错误就没有发生。然而,这会将所有空格转换为"nan"字符串,并将整数转换为浮点值,例如102到102.0

为了避免这个问题,我必须将整个数据帧转换为"object"类型,然后才能使用下面一行的dataframe_To_rows获取行。这解析了nan值和整数的浮点表示。

df = df.astype('object')
rows = dataframe_to_rows(df)  

最新更新