2011-10-15 7 views
25

Lorsque je tente de fusionner deux dataframes par les lignes faisant:append deux trames de données avec pandas géants

bigdata = data1.append(data2) 

Je reçois l'erreur suivante:

Exception: Index cannot contain duplicate values! 

L'indice de la première trame de données commence à 0 à 38 et le deuxième de 0 à 48. Je n'ai pas compris que je dois modifier l'index de l'un des cadres de données avant de fusionner, mais je ne sais pas comment.

Merci.

Ce sont les deux dataframes:

data1:

meta particle ratio area type  
0 2  part10 1.348 0.8365 touching 
1 2  part18 1.558 0.8244 single 
2 2  part2  1.893 0.894 single 
3 2  part37 0.6695 1.005 single 
....clip... 
36 2  part23 1.051 0.8781 single 
37 2  part3  80.54 0.9714 nuclei 
38 2  part34 1.071 0.9337 single 

data2:

meta particle ratio area type  
0 3  part10 0.4756 1.025 single 
1 3  part18 0.04387 1.232 dusts 
2 3  part2  1.132 0.8927 single 
...clip... 
46 3  part46 13.71 1.001 nuclei 
47 3  part3  0.7439 0.9038 single 
48 3  part34 0.4349 0.9956 single 

la première colonne est l'indice

+0

Pourriez-vous s'il vous plaît poster des clichés des deux objets 'dataframe' (par exemple dans l'interpréteur python, tapez le nom du' dataframe' si les objets sont dénombrés à l'écran). Indiquez également les mots clés que vous avez utilisés lors de la fusion. Comme vous pouvez le voir http://pandas.sourceforge.net/dataframe.html, il y a plusieurs façons de combiner des dataframes ... assurez-vous que vous utilisez celui qui a le plus de sens pour ce que vous essayez d'accomplir –

+0

voici une impression des deux dataframes: –

+0

Je suis désolé, mais je ne vois toujours pas le contenu de 'data1' et' data2' dans cette page web ... s'il vous plaît les éditer dans la question originale –

Répondre

40

La fonction append a un argument optionnel ignore_index que vous devez utiliser ici pour joindre les enregistrements ensemble, car l'index n'est pas significatif pour votre application.

+0

Merci, je vais essayer –

+0

@ Jean-Pat: pourquoi ne pas accepter la réponse? –

1

Vous pouvez d'abord identifier la ligne index-dupliquée (not value) à l'aide de la méthode groupby, puis effectuer une opération sum/mean sur toutes les lignes avec l'index dupliqué.

data1 = data1.groupby(data1.index).sum() 
data2 = data2.groupby(data2.index).sum() 
+0

J'ai eu des dupes avec panel = panel1.append (panel2). Et puis cela les a supprimés: panel = panel.groupby (panel.index) .sum() So thx. (On me dit que je travaille avec des panels, pas des dataframes, comment savoir) – gseattle

Questions connexes