首页 > 解决方案 > 循环和转换excel文件时无法分配给函数调用

问题描述

使用此代码:

    xls = pd.ExcelFile('test.xlsx')
    sn = xls.sheet_names
    for i,snlist in list(zip(range(1,13),sn)):
        'df{}'.format(str(i)) =  pd.read_excel('test.xlsx',sheet_name=snlist, skiprows=range(6))

我收到此错误:

'df{}'.format(str(i)) = pd.read_excel('test.xlsx',sheet_name=snlist, skiprows=range(6)) ^ SyntaxError: cannot assign to function call

我无法理解错误以及如何解决。有什么问题?
df+str(i) 也返回错误

我想让结果为: df1 = pd.read_excel.. list1... df2 = pd.read_excel... list2....

标签: python

解决方案


您不能将结果分配df.read_excel'df{}'.format(str(i))-- 这是一个看起来像,等的字符串。这就是您收到此错误消息的原因。该错误消息可能令人困惑,因为它将其视为对“函数调用”的赋值。"df0""df1""df2"

似乎您想要一个列表或DataFrames 字典。

为此,请将 的结果分配给df.read_excel变量例如df,然后append将其分配给列表,或将其添加到DataFrames 的字典中。

作为一个列表:

dataframes = []
xls = pd.ExcelFile('test.xlsx')
sn = xls.sheet_names
for i, snlist in list(zip(range(1, 13), sn)):
    df = pd.read_excel('test.xlsx', sheet_name=snlist, skiprows=range(6))
    dataframes.append(df)

作为字典:

dataframes = {}
xls = pd.ExcelFile('test.xlsx')
sn = xls.sheet_names
for i, snlist in list(zip(range(1, 13), sn)):
    df = pd.read_excel('test.xlsx', sheet_name=snlist, skiprows=range(6))
    dataframes[i] = df

在这两种情况下,您都可以通过如下索引来访问DataFrames:

for i in range(len(dataframes)):
    print(dataframes[i])
# Note indexes will start at 0 here instead of 1
# You may want to change your `range` above to start at 0

或者更简单地说:

for df in dataframes:
    print(df)

对于字典,您可能想要:

for i, df in dataframes.items():
    print(i, df)
# Here, `i` is the key and `df` is the actual DataFrame

如果您确实想要df1, df2etc 作为键,请改为执行以下操作:

dataframes[f'df{i}'] = df

推荐阅读