J'ai deux listes en python:

path = ['users/documents', 'users/desktop',....,.....,....]

dfnames = ['ABCDocuments', 'ABCFiles',...,...,...]

J'exécute une boucle pour prendre tous les fichiers .csv dans chacun des emplacements path et les transmettre dans des dataframes individuels.

Dans ma boucle, je voudrais créer un dataframe nommé d'après l'itération correspondante de dfnames.

Jusqu'à présent, mon code est:

for idx, filepath in enumerate(filepathlist):
    csvfiles = glob.glob(os.path.join(path, '*.csv'))
    dataframes = []  
    for csvfile in csvfiles:
        df = pd.read_csv(csvfile)
        dataframes.append(df)

    dfnames[idx] = pd.concat(dataframes, ignore_index=True)

J'obtiens une erreur. Est-il possible que je puisse nommer le dataframe la chaîne résultante de dfnames[idx]?

Je veux essentiellement tous les fichiers .csv de users/documents dans une seule trame de données appelée ABCDocuments et de même pour tous les autres éléments de mes listes

0
SOK 13 mars 2021 à 13:23

1 réponse

Meilleure réponse

Si vous souhaitez simplement utiliser un nom de dfnames pour référencer une dataframe, vous pouvez simplement utiliser un dictionnaire pour regrouper toutes les dataframes sous les clés de votre choix:

dfs = {}
dfs[dfnames[idx]] = dframe

C'est la bonne façon de procéder.

Si vous souhaitez obtenir des variables avec des noms de dfnames pour référencer des dframe spécifiques, vous pouvez les attribuer à des locaux bien que ce ne soit pas conseillé, voici comment vous attribueriez une variable nommée avec un contenu de chaîne de dfnames[1], (supposons dfnames[1]='ABCFiles') à la portée locale et lui attribueriez la valeur dframe:

locals()[dfnames[1]] = dframe

Après avoir tapé ABCFiles dans la même portée référencera la variable dframe

0
ESDAIRIM 13 mars 2021 à 10:48