获取“builtin_function_or_method对象没有属性”从Excel文件阅读所有工作表时出错

kr98yfug  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(390)

我试图从当前目录中读取所有Excel文件,并从每个文件中读取所有工作表。当我尝试下面的代码与单个工作表,它工作正常,但当我尝试与多个工作表,然后它给出下面的错误

for row in df.values.tolist(): AttributeError: 'builtin_function_or_method' object has no attribute 'tolist'

下面是我的代码:

path = os.getcwd()
files = glob.glob(os.path.join(path,"*.xlsx"))

df_email = pd.DataFrame()
for f in files:
df=pd.read_excel(f, sheet_name=None)

for row in df.values.tolist():
    for col in row:
        matches = re.findall(regex, str(col))
        if matches:
            df_email = df_email.append([matches[0]], ignore_index=True)
rkue9o1l

rkue9o1l1#

这是因为read_excel函数的sheet_name参数。如果不指定sheet_name值,read_excel将返回DataFrame(读取excel文件的第一个工作表)。但是,如果指定sheet_name值(工作表名称为列表或None),它将返回DataFrame的字典。(请参阅https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html
因此,您必须使用df.values()来获取excel文件中的每个工作表,因为df的类型不是DataFrame,而是dict
尝试打印df的类型,如下所示:

path = os.getcwd()
files = glob.glob(os.path.join(path,"*.xlsx"))

df_email = pd.DataFrame()
for f in files:
df=pd.read_excel(f, sheet_name=None)
print(type(df)) # You expected DataFrame, but it is a dictionary.

相关问题