2016-04-25 16 views
0

Ich habe zwei Dateien mit Informationen. Ich muss die Zeilen von beiden Dateien zusammenführen/verbinden, die in einer bestimmten Spalte identisch sind.Mischen von zwei Dateien in Pandas

Datei A:

#chr #start #end #gene #0 #strand 
chrM 3307 4262 MT-ND1 0 + 
chrM 4470 5511 MT-ND2 0 + 
chrM 12337 14148 MT-ND5 0 + 

Datei B:

#chr #start #end #gene #0 #strand #e_chr #e_start #e_end  #e_id      #0 #strand 
chr1 12337 14148 MT-ND5 0 + chr1 161427010 161427243 Larp7-Chip.MACS2_peak_9704 0 . 
chr1 3307 4262 MT-ND1 0 + chr1 161423805 161424053 Larp7-Chip.MACS2_peak_9703 0 . 
chr1 4470 5511 MT-ND2 0 + chr1 161429385 161429489 Larp7-Chip.MACS2_peak_9705 0 . 

Mein Ergebnis Ausgabe aussehen sollte (im Wesentlichen B ähnlich A sortiert Datei Datei):

#chr #start #end #gene #0 #strand #e_chr #e_start #e_end  #e_id      #0 #strand 
chr1 3307 4262 MT-ND1 0 + chr1 161423805 161424053 Larp7-Chip.MACS2_peak_9703 0 . 
chr1 4470 5511 MT-ND2 0 + chr1 161429385 161429489 Larp7-Chip.MACS2_peak_9705 0 . 
chr1 12337 14148 MT-ND5 0 + chr1 161427010 161427243 Larp7-Chip.MACS2_peak_9704 0 . 

Ich habe versucht, Verwenden Sie hierzu pandas.DataFrame.merge, um Folgendes zu tun:

Dies schien zunächst zu funktionieren, aber einige Zeilen fehlen. Datei A hat 19.000 Zeilen und Datei B hat 4.800 Zeilen. Aber meine Ausgabedatei hat nur ungefähr 3,8k, wenn ich erwarte, dass sie 4.800 hat. Was mache ich falsch? Gibt es einen einfacheren Weg dies zu tun? Ich bin neu in Python.

+1

Dies hängt von den tatsächlichen Werten in 'Gen' in Ihre Dateien. Ich schlage vor, dass Sie die Dateien in ein paar Zeilen (sagen wir 20) schneiden und betrachten Sie es erneut. Wenn das Problem weiterhin ungelöst ist, veröffentlichen Sie die Daten. – tfv

+0

Ich habe den Python-Kurs bei Teamtreehouse beendet. Die Syntax ist nicht das Problem. Meine Arbeit beinhaltet eine Vielzahl von tabulatorgetrennten Dateiverarbeitungen, die ich normalerweise in R mache. Ich versuche das Gleiche in Python mit Pandas zu tun. Ist das ein Problem? @tfv ich gebe das eine Chance – System

+0

Wie viele recs fallen Sie über '.dropna()'? Ich würde dort anfangen. – siegerts

Antwort

1

Ihrer Beschreibung Nach sollten Sie how='right' oder alternativ werden: FileB.merge(FileA, how='left', on='gene')

Erläuterung:

In [171]: a 
Out[171]: 
    id col1 col2 
0 1 a aa 
1 2 b bb 
2 3 c cc 
3 4 d dd 
4 5 e ee 

In [172]: b 
Out[172]: 
    id col1 col2 
0 2 x xx 
1 4 y yy 

Merging alle Zeilen aus a mit denen nur die von b entsprechen: a.merge(b, how='left')

In [173]: a.merge(b, on='id', how='left') 
Out[173]: 
    id col1_x col2_x col1_y col2_y 
0 1  a  aa NaN NaN 
1 2  b  bb  x  xx 
2 3  c  cc NaN NaN 
3 4  d  dd  y  yy 
4 5  e  ee NaN NaN 

Zusammenführen aller Zeilen von b mit nur diejenigen, die aus a entsprechen: b.merge(a, how='left')

In [174]: b.merge(a, on='id', how='left') 
Out[174]: 
    id col1_x col2_x col1_y col2_y 
0 2  x  xx  b  bb 
1 4  y  yy  d  dd 

oder:

In [175]: a.merge(b, on='id', how='right') 
Out[175]: 
    id col1_x col2_x col1_y col2_y 
0 2  b  bb  x  xx 
1 4  d  dd  y  yy 
Verwandte Themen