Pandas: Suffixes ignorés lors de la deuxième fusion

Créé le 10 févr. 2015  ·  3Commentaires  ·  Source: pandas-dev/pandas

J'essaie de fusionner plusieurs dataframes avec des opérations de fusion consécutives, je souhaite ajouter un suffixe au nom des noms de colonnes nouvellement fusionnés. Une version simplifiée de mon code ressemble à ceci :

from pandas import *
f0 = DataFrame(columns=['data'], data=[1,2,3], index=['a','b','c'])
f1 = DataFrame(columns=['data'], data=[4,5,6], index=['c','b','a'])
f2 = DataFrame(columns=['data'], data=[7,8,9], index=['a','c','b'])
merged = f0
merged = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
merged = merged.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
print merged.columns

Avec les pandas 0.15.2 sur python 2.7, cela renvoie :

Index([u'data_0', u'data_1', u'data'], dtype='object')

alors que je me serais attendu

Index([u'data_0', u'data_1', u'data_2'], dtype='object')
Reshaping Usage Question

Commentaire le plus utile

semble que tu veux juste ça?

In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]: 
   0  1  2
a  1  6  7
b  2  5  9
c  3  4  8

les suffixes ne s'appliquent que s'il y a des colonnes en double qui, après la première fusion, il n'y en a pas (par rapport à la 3e)

In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))

In [47]: merged1
Out[47]: 
   data_0  data_1
c       3       4
b       2       5
a       1       6

In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]: 
   data_0  data_1  data
a       1       6     7
c       3       4     8
b       2       5     9

Tous les 3 commentaires

semble que tu veux juste ça?

In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]: 
   0  1  2
a  1  6  7
b  2  5  9
c  3  4  8

les suffixes ne s'appliquent que s'il y a des colonnes en double qui, après la première fusion, il n'y en a pas (par rapport à la 3e)

In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))

In [47]: merged1
Out[47]: 
   data_0  data_1
c       3       4
b       2       5
a       1       6

In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]: 
   data_0  data_1  data
a       1       6     7
c       3       4     8
b       2       5     9

Ah merci pour l'explication, j'ai raté le fait que les suffixes ne s'appliquent qu'aux noms de colonnes en double. Et effectivement la solution concat est plus simple. Et pour mémoire : concat(... ignore_index=True) est exactement le contraire de ce que je veux, mais avec concat(... ignore_index=False) ça marche bien.

super

gardez à l'esprit que vous ne voulez généralement pas avoir de colonnes en double

vous voudrez peut-être un résultat à plusieurs niveaux - utilisez l'argument keys pour concaténer

Cette page vous a été utile?
0 / 5 - 0 notes