Il y a plus de 50 niveaux différents dans une colonne, et chaque niveau doit être divisé en son propre cadre de données et écrit dans un fichier (Excel ou CSV).
J'ai vu cela comme une solution possible:
df1, df2, df3, df4 = [x for _, x in df.groupby(df['column_of_interest'])]
mais y a-t-il un moyen de ne pas coder en dur le nombre de blocs de données?
3 Réponses :
Existe-t-il un moyen de ne pas coder en dur le nombre de blocs de données?
Oui, il y en a. Utilisez un dictionnaire ou une liste. En utilisant
dict
:for idx, (value, x) in enumerate(df.groupby('column_of_interest'), 1): x.to_csv(f'slice_{value}.csv') # include value in filename x.to_csv(f'slice_{idx}.csv') # include numeric index in filenameAccédez ensuite à vos dataframes via
dfs [1]
,dfs [2] , etc.
Vous pouvez également utiliser
list
:dfs = [x for _, x in df.groupby('column_of_interest')]Ensuite, utiliser
dfs [0] ,
dfs [1]
, etc.Si vous n'avez pas besoin de stocker vos tranches de dataframe, itérez simplement un
groupby
et utilisezto_csv
. Ceci est pratique avec les chaînes f ( PEP 498 , Python 3.6+) :dfs = {i: x for i, (_, x) in enumerate(df.groupby('column_of_interest'), 1)}
Vous pouvez enregistrer les dataframes directement
for val, df1 in df.groupby(df['column_of_interest']): #Write the df1 to csv or excel df1.to_csv("coi_%s.csv"%val)
Ou avec une boucle for explicite
[df1.to_csv("coi_%s.csv"%val) for val, df1 in df.groupby(df['column_of_interest'])]
Cela a fonctionné. J'avais besoin de sauvegarder le csv au niveau de la colonne. Merci!
Une façon peut faire cela en utilisant locaux
mais pas de recommandation, je pense personnellement que la réponse de jpp est la bonne façon pour ce type de demande.
variables = locals() for key,value in df.groupby(df['column_of_interest']): variables["df{0}".format(key)]= value