简体   繁体   中英

Creating lists of dataframes to iterate over those dataframes

In Python, I'm reading an Excel file with multiple sheets, to create each sheet as its own dataframe. I then want to create a list of those dataframes 'names' so i can use it in list comprehension.
The code below lets me create all the sheets into their own dataframe, and because some of the sheet names have special characters, I use regex to replace them with an underscore:

df = pd.read_excel('Book1.xlsx', sheet_name=None)
df = {re.sub(r"[-+\s]", "_", k): v for k,v in df.items()}
for key in df.keys():
    globals()[key] = df[key]

Then, I can get a list of the dataframes by: all_dfs= %who_ls DataFrame ,
giving me: ['GB_SF_NZ', 'GF_1', 'H_2_S_Z']

When I try the following code:

for df in all_dfs:
    df.rename(columns=df.iloc[2], inplace=True)

I get the error 'AttributeError: 'str' object has no attribute 'rename'

But, if I manually type out the names of the dataframes into a list (note here that they are not in quotation marks):

manual_dfs = [GB_SF_NZ, GF_1, H_2_S_Z]

for df in manual_dfs:
        df.rename(columns=df.iloc[2], inplace=True)

I don't get an error and the code works as expected.

  1. Can anyone help me with why one works (without quotation) but the other (extracted with quotation) doesn't, and
  2. how can I create a list of dataframes without the quote marks?

Following your code, you can do.:

for df in all_dfs:
    globals()[df].rename(columns=df.iloc[2], inplace=True)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM