J'ai plusieurs (plus de 100) trames de données. Comment puis-je les concaténer tous?
Le problème est que j'ai trop de cadres de données, que je ne peux pas les écrire manuellement dans une liste, comme ceci:
>>> cluster_1 = pd.DataFrame([['a', 1], ['b', 2]],
... columns=['letter ', 'number'])
>>> cluster_1
letter number
0 a 1
1 b 2
>>> cluster_2 = pd.DataFrame([['c', 3], ['d', 4]],
... columns=['letter', 'number'])
>>> cluster_2
letter number
0 c 3
1 d 4
>>> pd.concat([cluster_1, cluster_2])
letter number
0 a 1
1 b 2
0 c 3
1 d 4
Les noms de mes N dataframes sont cluster_1, cluster_2, cluster_3, ..., cluster_N. Le nombre N peut être très élevé.
Comment puis-je concaténer N trames de données?
Je pense que vous pouvez simplement le mettre dans une liste, puis concaténer la liste. Dans Pandas, la fonction chunk fait déjà cela. Personnellement, je fais cela lorsque j'utilise la fonction de morceau dans les pandas.
pdList = [df1, df2, ...] # List of your dataframes
new_df = pd.concat(pdList)
Pour créer automatiquement la pdList en supposant que votre dfs commence toujours par "cluster".
pdList = []
pdList.extend(value for name, value in locals().items() if name.startswith('cluster_'))
Cela se passe généralement comme:
frames = [df1, df2, df3]
result = pd.concat(frames)
Remarque: il réinitialisera automatiquement l'index. Lisez plus de détails sur les différents types de fusion ici .
Pour un grand nombre de trames de données: Si vous avez des centaines de trames de données, en fonction d'une si vous en avez sur le disque ou en mémoire, vous pouvez toujours créer un list ("frames" dans l'extrait de code) à l'aide d'une boucle for. Si vous l'avez sur le disque, cela peut être facilement fait en enregistrant tous les df dans un seul dossier puis en lisant tous les fichiers de ce dossier.
Si vous générez les df en mémoire, essayez peut-être de les enregistrer dans .pkl
première.
Utilisation:
pd.concat(your list of column names)
Et si vous voulez un index régulier:
pd.concat(your list of column names,ignore_index=True)