简体   繁体   中英

Name Dataframes after list values

I am attempting to create 3 dataframes, and name them after the 2nd element of each list.

In my actual project, there are 10+ dataframes, and the number could vary.

I don't know how to structure the return statement in the function. I also believe that when I state x[1] = pd.DataFrame() , I am inadvertently attempting to change the list value, whereas my intention is to use the list value as the df name itself.

import pandas as pd

names = [
    ['SPtab', 'sp', 'man'],
    ['SBtab', 'sb', 'man'],
    ['SDtab', 'sd', 'man']
]

def create_dfs():
    for x in names:
        x[1] = pd.DataFrame()
    return
    
print(sp)
print(sb)
print(sd)

This should work (using dynamic global variables is a bad practice and it would be better if you use a python dictionary, this solution uses dynamic variables. The lower one uses a dictionary):

import pandas as pd

names = [
    ['SPtab', 'sp', 'man'],
    ['SBtab', 'sb', 'man'],
    ['SDtab', 'sd', 'man']
]

def create_dfs():
    for x in names:
        exec(f"%s = pd.DataFrame()" % (x[1]), globals())
    
create_dfs()

create_dfs() creates several empty variables with the names defined in names . It uses the built in exec() function to define a variable with the name defined in the names list. When exec() is called, it is called with globals() as a parameter to make sure that the variable is a global variable.

Or you could do it with a dictionary:

import pandas as pd

names = [
    ['SPtab', 'sp', 'man'],
    ['SBtab', 'sb', 'man'],
    ['SDtab', 'sd', 'man']
]

def create_dfs(names):
    dfs = {}
    for x in names:
        dfs[x[1]] = pd.DataFrame()
    return dfs
    
dfs = create_dfs(names)

For this solution create_dfs() returns a dictionary containing all of the dataframes. This output is assigned to a variable called dfs

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