Python 重命名列+;向dataframe添加缺少的列

Python 重命名列+;向dataframe添加缺少的列,python,pandas,Python,Pandas,背景: 我有一个dataframe,其中的列如下所示: >>> 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

背景:

我有一个dataframe,其中的列如下所示:

>>> 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_cols.reindex(columns = new_colnames)
   Gene.AA  Transcript   Exon         Coding  Amino Acid Change
0    STK11   NM_000455  exon1   c.148_149TG                NaN
我需要在“:”字符上将其拆分为单独的列,如下所示:

>>> 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_cols.reindex(columns = new_colnames)
   Gene.AA  Transcript   Exon         Coding  Amino Acid Change
0    STK11   NM_000455  exon1   c.148_149TG                NaN
然后我需要重命名列,因此我将新名称存储在列表中:

>>> 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
现在我得到了所有缺少的列,但原始数据已经丢失。是否有更好的解决方案可以让我重命名现有列并添加所有缺少的列

所需的输出如下所示:

>>> 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_cols.reindex(columns = new_colnames)
   Gene.AA  Transcript   Exon         Coding  Amino Acid Change
0    STK11   NM_000455  exon1   c.148_149TG                NaN

您可以将原始列名重命名为所需的前导列名

new_cols.columns = new_colnames[:-1]

# new_cols
  Gene.AA Transcript   Exon       Coding
0   STK11  NM_000455  exon1  c.148_149TG
然后,通过下面的命令插入额外的一个。它将新列作为#4列插入,并用
nan
值填充

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

您可以将原始列名重命名为所需的前导列名

new_cols.columns = new_colnames[:-1]

# new_cols
  Gene.AA Transcript   Exon       Coding
0   STK11  NM_000455  exon1  c.148_149TG
然后,通过下面的命令插入额外的一个。它将新列作为#4列插入,并用
nan
值填充

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

尝试分配5个名称时,拆分的输出包含4列。我想你是想给索引命名?我想根据
new\u colnames
中的列表重命名列。在99%的情况下,拆分的输出会给出所有5个所需的字段,
new_cols.columns=new_colnames
工作正常,但偶尔我会碰到这样一个数据条目,它缺少一个字段,因此拆分后只给出4列。好吧,你需要重新编写你的问题,您的问题实际上是处理结果产生的字段数少于所需数量的情况。您只需检查
new\u cols
的长度,然后简单地添加缺少的列(假设它总是最后一列)
new\u cols[4]=无
,然后分配列名。如果返回的列少于5列,您如何知道缺少哪些列?当您尝试分配5个名称时,拆分的输出包含4列。我想你是想给索引命名?我想根据
new\u colnames
中的列表重命名列。在99%的情况下,拆分的输出会给出所有5个所需的字段,
new_cols.columns=new_colnames
工作正常,但偶尔我会碰到这样一个数据条目,它缺少一个字段,因此拆分后只给出4列。好吧,你需要重新编写你的问题,您的问题实际上是处理结果产生的字段数少于所需数量的情况。您只需检查
new\u cols
的长度,然后简单地添加缺少的列(假设它总是最后一列)
new\u cols[4]=无
,然后分配列名。如果返回的列数小于5,您如何知道缺少哪些列?有关向数据帧添加列的信息,请参阅,有关向数据帧添加列的信息,请参阅