2016-12-09 3 views
0

Hintergrund:Umbenennen Spalten + hinzufügen Spalten fehlen Datenrahmen

ich einen Datenrahmen haben, mit einer Spalte, die wie folgt aussieht:

>>> merge_df['AAChange'] 
0 STK11:NM_000455:exon1:c.148_149TG 
Name: AAChange, dtype: object 

ich es in separaten Spalten auf der aufzuspalten müssen ‚:‘ Charakter, wie folgt aus:

>>> new_cols = merge_df['AAChange'].str.split(':').apply(pd.Series,1) 
>>> new_cols 
     0   1  2   3 
0 STK11 NM_000455 exon1 c.148_149TG 

Dann brauche ich die Spalten umbenennen, so dass ich speichern die neuen Namen in einer Liste:

>>> new_colnames = ['Gene.AA', 'Transcript', 'Exon', 'Coding', 'Amino Acid Change'] 

Es gibt jedoch ein Problem: Alle 5 dieser Spalten müssen in der Ausgabe vorhanden sein, aber in diesem Dateneintrag fehlte ein Feld in den Quelldaten, so dass nur 4 Felder übrig blieben. Also, nicht die Spalten umbenennen versuchen:

>>> new_cols.columns = new_colnames 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/local/apps/python/2.7.3/lib/python2.7/site-packages/pandas/core/generic.py", line 2371, in __setattr__ 
    return object.__setattr__(self, name, value) 
    File "pandas/src/properties.pyx", line 65, in pandas.lib.AxisProperty.__set__ (pandas/lib.c:45002) 
    File "/local/apps/python/2.7.3/lib/python2.7/site-packages/pandas/core/generic.py", line 425, in _set_axis 
    self._data.set_axis(axis, labels) 
    File "/local/apps/python/2.7.3/lib/python2.7/site-packages/pandas/core/internals.py", line 2572, in set_axis 
    'new values have %d elements' % (old_len, new_len)) 
ValueError: Length mismatch: Expected axis has 4 elements, new values have 5 elements 

Also, ich möchte sowohl eine leere Spalte für jede fehlende Spalte hinzuzufügen, und die Spaltennamen gleichzeitig zu ändern. This answer schien eine gute Lösung zu haben; basierend auf der neuen Spaltenliste neu zu indizieren. Allerdings ist es nicht die gewünschten Ergebnisse:

>>> new_cols.reindex(columns = new_colnames) 
    Gene.AA Transcript Exon Coding Amino Acid Change 
0  NaN   NaN NaN  NaN    NaN 

Jetzt habe ich alle fehlenden Spalten bekommt, aber die ursprünglichen Daten verloren gegangen sind. Gibt es eine bessere Lösung, mit der ich die vorhandenen Spalten umbenennen und alle fehlenden Spalten hinzufügen kann?

Die gewünschte Ausgabe würde wie folgt aussehen:

>>> new_cols.reindex(columns = new_colnames) 
    Gene.AA Transcript Exon   Coding Amino Acid Change 
0 STK11 NM_000455 exon1 c.148_149TG    NaN 
+0

Die Ausgabe Ihres Split enthält 4 Spalten, während Sie versuchen, 5 Namen zuzuweisen. Ich schätze, du versuchst den Index zu benennen? – sirfz

+0

Ich versuche, die Spalten basierend auf der Liste in 'new_colnames' umzubenennen. In 99% der Fälle liefert die Ausgabe der Aufteilung alle 5 gewünschten Felder und 'new_cols.columns = new_colnames' funktioniert korrekt, aber gelegentlich treffe ich einen Dateneintrag wie diesen, dem ein Feld fehlt, was nur 4 Spalten nach der Aufteilung ergibt. – user5359531

+0

In Ordnung, also müssen Sie Ihre Frage neu schreiben, Ihr Problem behandelt tatsächlich die Fälle, in denen das Ergebnis weniger als die gewünschte Anzahl von Feldern ergibt. – sirfz

Antwort

0

Sie können die ursprünglichen Spaltennamen mit den führenden Gewünschten umbenennen.

new_cols.columns = new_colnames[:-1] 

# new_cols 
    Gene.AA Transcript Exon  Coding 
0 STK11 NM_000455 exon1 c.148_149TG 

Dann fügen Sie die zusätzliche durch den folgenden Befehl ein. Sie fügt die neue Spalte als Spalte # 4 ein und füllt sie mit nan Werten.

new_cols.insert(4, new_colnames[-1], [np.nan]*len(new_cols.index)) 

# new_cols 
    Gene.AA Transcript Exon  Coding Amino Acid Change 
0 STK11 NM_000455 exon1 c.148_149TG    NaN 
Verwandte Themen