1
votes

Définir les noms des pandas après les éléments de la liste

J'ai plusieurs fichiers xlsx contenant des données que je souhaite importer dans des dataframes séparés en Python.

Actuellement, je souhaite importer une feuille de calcul de septembre 2014 à octobre 2014. Les feuilles de calcul se trouvent dans différents dossiers pour chaque année et les noms de fichiers sont les suivants dans la variable month_list. Les noms de dataframe souhaités sont "2014_09_sept_df" et "2014_10_okt_df"

df_string_list[k] = pd.read_excel(filestring)

Mon problème est que j'ai créé la liste df_string_list pour contenir les noms de dataframe, et quand je veux nommer les dataframes avec cet élément de la liste, le dataframe est mis dans la liste avec cette commande, au lieu de créer un dataframe:

month_list = ['09_sept', '10_okt']

df_string_list=[]
k = 0

for i in range(2014,2015):
    dirstring = 'C:/Users/folder/' + str(i)
    os.chdir(dirstring)

    for j in month_list:
        filestring = dirstring + '/' + j + '.xlsx'
        my_file = Path(filestring)            

        if my_file.exists():
            df_string_list.append(str(i) + '_' + j + '_df')
            df_string_list[k] = pd.read_excel(filestring)
            k+=1              


0 commentaires

3 Réponses :


0
votes

Si je vous comprends bien, je vous suggère d'utiliser un dict et non une liste:

for dfname in df_string_list.keys():
  print(dfname)
  #print(df_string_list[dfname]    #uncomment to print the desired df

dans ce cas, par exemple, df_string_list ['2014_09_sept_df'] code > contient le Dataframe du bon fichier.

Pour connaître tous les noms de dataframe chargés dans votre dict, utilisez:

df_string_list={}    #create an empty dict

for i in range(2014,2015):
    dirstring = 'C:/Users/folder/' + str(i)
    os.chdir(dirstring)

    for j in month_list:
        filestring = dirstring + '/' + j + '.xlsx'
        my_file = Path(filestring)            

        if my_file.exists():
            df_string_list[str(i) + '_' + j + '_df'] = pd.read_excel(filestring)


2 commentaires

Génial! Cela a fonctionné et a créé un dictionnaire, qui contient mes dataframes nécessaires. Comment puis-je convertir ce dictionnaire en dataframes séparés, comme prévu au départ?


vous avez les différentes clés dans le dictionnaire qui sont le nom de dataframe, par exemple df_string_list ['2014_09_sept_df'] est l'une des dataframe dans le dictionnaire. Vous avez toutes les clés et la trame de données liées. Si je ne comprends pas, vous expliquez précisément dans la question



0
votes

Si vous souhaitez utiliser un élément de liste comme nom de votre dataframe, vous pouvez faire quelque chose comme ceci à la fin de votre boucle

globals()[df_string_list[k]] = pd.read_excel(filestring) 


0 commentaires

0
votes

Le problème a donc été résolu. :) Je ne peux pas utiliser un élément de liste, pour nommer un dataframe, mais la fonction exec et .format ont sauvé la journée, comme ceci:

if my_file.exists():
            exec('{} = pd.DataFrame(pd.read_csv(filestring))'.format(j + '_' + str(i)))

Note supplémentaire: j'ai aussi réalisé qu'un Le nom du dataframe ne peut pas commencer par un nombre.


0 commentaires