Home > Software design >  How can I simplify this function, random pandas DF selection adding to dictionary?
How can I simplify this function, random pandas DF selection adding to dictionary?

Time:02-02

How can I simplify this function I am trying to create? I would like to pull data from a csv. Turn it into a Dataframe, randomly select a choice, add that choice to a corresponding dictionary key value pair.

 def generate_traits():
    import pandas as pd
    
    df_bonds = pd.read_csv('/file/location_1')
    df_alignments = pd.read_csv('/file/location_2')
    df_faiths = pd.read_csv('/file/location_3')
    df_flaws = pd.read_csv('/file/location_4')
    df_ideals = pd.read_csv('/file/location_5')
    df_lifestyles = pd.read_csv('/file/location_6')
    df_organizations = pd.read_csv('/file/location_7')
    df_personalities = pd.read_csv('/file/location_8')
    df_names = pd.read_csv("/file/location_9")
    
    random_bond = df_bonds.sample(1)
    random_alignment = df_alignments.sample(1)
    random_faith = df_faiths.sample(1)
    random_flaw = df_flaws.sample(1)
    random_ideal = df_ideals.sample(1)
    random_lifestyle = df_lifestyles.sample(1)
    random_organization = df_organizations.sample(1)
    random_personaltiy = df_personalities.sample(1)
    random_name = df_names.sample(1)
    
    traits_dict={"Name:": random_name.iloc[0,0],
              "Alignment:": random_alignment.iloc[0,0],
              "Bond:":random_bond.iloc[0,0],
              "Religion:":random_faith.iloc[0,0],
              "Flaw:":random_flaw.iloc[0,0],
              "Ideal:":random_ideal.iloc[0,0],
              "Lifestyle:":random_lifestyle.iloc[0,0],
              "Organization:":random_organization.iloc[0,0],
              "Personality:":random_personaltiy.iloc[0,0]}
    
    return traits_dict

The function does behave as expected however, I know there must be a way to loop through this I just have not found any way to do so.

CodePudding user response:

You can chain your operations:

import pandas as pd

def generate_traits():
    return {'Name': pd.read_csv('/file/location_1').sample(1).iloc[0,0],
            'Alignment:': pd.read_csv('/file/location_2').sample(1).iloc[0,0],
            'Bond': pd.read_csv('/file/location_3').sample(1).iloc[0,0],
            'Religion': pd.read_csv('/file/location_4').sample(1).iloc[0,0],
            'Flaw': pd.read_csv('/file/location_5').sample(1).iloc[0,0],
            'Ideal': pd.read_csv('/file/location_6').sample(1).iloc[0,0],
            'Lifestyle': pd.read_csv('/file/location_7').sample(1).iloc[0,0],
            'Organization': pd.read_csv('/file/location_8').sample(1).iloc[0,0],
            'Personality': pd.read_csv('/file/location_9').sample(1).iloc[0,0]}

CodePudding user response:

def generate_traits():
    import pandas as pd

    name_location = {'Bond': 'location_1'
                     'Alignment': 'location_2'
                     'Religion': 'location_3'
                     'Flaw': 'location_4'
                     'ideals': 'location_5'
                     'Lifestyle': 'location_6'
                     'Organization': 'location_7'
                     'Personality': 'location_8'
                     'Name': 'location_9'}
    all_df = {name: pd.read_csv(f'/file/{loc}') for name, loc in name_location.items()}
    traits_dict = {name: df.sample(1).iloc[0, 0] for name, df in all_df.items()}

    return traits_dict
  •  Tags:  
  • Related