背景:私は上の別の列に分割する必要が名前の変更、列+データフレームに不足している列を追加
>>> merge_df['AAChange']
0 STK11:NM_000455:exon1:c.148_149TG
Name: AAChange, dtype: object
:
私はこのようになります列を持つデータフレーム、持っている「と」文字、このような:
>>> 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
は、その後、私は列の名前を変更する必要があるので、私は、リストに新しい名前を格納します。
>>> new_colnames = ['Gene.AA', 'Transcript', 'Exon', 'Coding', 'Amino Acid Change']
しかし、これらの5つの列はすべて出力に存在しなければなりませんが、このデータ入力ではソースデータにフィールドが4つしか残っていませんでした。だから、列の名前を変更しようとすると、失敗します。
>>> 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
だから、私はすべての不足している列に空の列を追加し、同時に列名を変更するには、両方たいです。 This answerは良い解決策があるようでした。新しい列リストに基づいてインデックスを再作成します。しかし、望ましい結果が得られません:
>>> new_cols.reindex(columns = new_colnames)
Gene.AA Transcript Exon Coding Amino Acid Change
0 NaN NaN NaN NaN NaN
今私はすべての欠落している列を持っていますが、元のデータは失われています。既存の列の名前を変更し、すべての不足している列を追加するためのより良いソリューションはありますか?
所望の出力は次のようになります。
>>> new_cols.reindex(columns = new_colnames)
Gene.AA Transcript Exon Coding Amino Acid Change
0 STK11 NM_000455 exon1 c.148_149TG NaN
スプリットの出力には、5つの名前を割り当てようとしているときに4つの列が含まれています。私はあなたがインデックスの名前をしようとしていると思いますか? – sirfz
'new_colnames'のリストに基づいて列の名前を変更しようとしています。 99%の場合、splitの出力は5つのフィールドすべてを指定し、 'new_cols.columns = new_colnames'は正しく動作しますが、時にはフィールドの欠落したこのようなデータエントリにヒットすることがあります。 – user5359531
申し訳ありませんが、質問を書き直す必要があります。問題は実際には、結果が必要なフィールド数より少なくなるケースを実際に処理しています。 – sirfz