Pandas和Excel循环中的类型错误

2024-05-15 17:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个for循环,用于从包含多个工作表的excel工作簿创建Pandas数据框。实际上,我希望通过从excel工作簿的所有工作表中选择特定列中的数据来创建数据框。我的代码如下。你知道吗

  for sheet in sheetnames:
    df1[sheet]=pd.read_excel('P:/ITM/egi_esa/1.Users_Personal_Folders/Vignesh/JRC/Wind_TEMBA.xlsx',sheet_name=sheet,usecols='J')

其中sheetnames是包含excel工作簿中不同工作表的名称(4个字符串)的列表。当我第一次运行代码时,没有错误。但是,当我第二次运行它时,我得到以下错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-e1db6061ba75> in <module>
      1 for sheet in sheetnames:
----> 2     df1[sheet]=pd.read_excel('P:/ITM/egi_esa/1.Users_Personal_Folders/Vignesh/JRC/Wind_TEMBA.xlsx',sheet_name=sheet,usecols='J')

TypeError: 'type' object does not support item assignment

有人能帮我理解为什么它第一次有效而不是第二次。你知道吗

最好的 五


Tags: 数据代码inforreadexceluserspersonal
1条回答
网友
1楼 · 发布于 2024-05-15 17:23:01

如果要将excel文件中的所有工作表读入dict,其中key是工作表名称,value是工作表的数据框,您可以看到以下代码

xls = pd.ExcelFile('excel_file_path.xls')

# Now you can list all sheets in the file
xls.sheet_names
# ['sheet1', 'sheet2', ...]

sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
    sheet_to_df_map[sheet_name] = xls.parse(sheet_name)

这可以用这样的单行代码来完成

sheet_to_df_map = pd.read_excel(file_name, sheet_name=None)

你会得到OrderedDict

之后,可以循环遍历字典值并获取所需的列并生成最终的数据帧

df1 = pd.DataFrame()


for key, data in sheet_to_df_map.items():

    if 'J' in data.columns:
        df1[key] = data['J']
    else:
        df1[key] = [np.nan] * len(data)

print(df1)

只有当所有纸张的长度相同时(即每张纸的行数相同),这才有效。你知道吗

相关问题 更多 >