You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas使用map函数读取Excel指定工作表传参报错如何解决

问题场景

原有批量合并input目录下Excel文件的代码如下,此前单工作表结构下运行正常:

import pandas as pd
import os
path=os.chdir("input")
files = os.listdir(path) 
df=pd.concat(map(pd.read_excel, files))

调整为多工作表结构后,需要指定读取名为RawData的工作表,尝试直接给pd.read_excel传参时报错:

TypeError: read_excel() missing 1 required positional argument: 'io'

需要确认是否可以保留map写法传入固定关键字参数,还是必须改写为循环结构。


报错原因

你写的pd.read_excel(sheet_name='RawData')会被立刻执行,此时没有传入必填的文件路径参数io,因此直接触发参数缺失错误。map的第一个参数需要传入可调用的函数对象,而不是函数执行完成后的返回值。

解决方案

不需要改写为显式for循环,两种写法都可以保留map的简洁形式:

  1. 推荐:用functools.partial固定参数
    这是最简洁、可读性最好的写法,通过partial预绑定固定关键字参数,生成新的可调用对象传入map即可:

    from functools import partial
    import pandas as pd
    import os
    
    os.chdir("input")
    files = os.listdir()
    # 预绑定sheet_name参数
    read_raw_sheet = partial(pd.read_excel, sheet_name="RawData")
    df = pd.concat(map(read_raw_sheet, files))
    

    注:原代码中path = os.chdir("input")的赋值没有实际作用,os.chdir修改工作目录后返回值为None,os.listdir(None)默认就是读取当前工作目录内容,直接写os.listdir()即可。

  2. 无额外导入:用lambda匿名函数包装
    如果不想额外导入模块,直接用lambda包装一层传参逻辑也可以实现相同效果:

    import pandas as pd
    import os
    
    os.chdir("input")
    files = os.listdir()
    df = pd.concat(map(lambda file: pd.read_excel(file, sheet_name="RawData"), files))
    

内容的提问来源于stack exchange,提问作者Ian Irvine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:24:15