熊猫列标题拆分

时间:2019-11-13 15:38:29

标签: pandas dataframe

我有一个带有colums标头的数据框,该标头由3个标记组成,这些标记由'__'分隔

例如

   A__2__66    B__4__45
0
1
2
3
4
5

我知道我不能拆分标题,而只能将第一个标签与该代码一起使用; df.columns=df.columns.str.split('__').str[0]

给予:

   A    B
0
1
2
3
4
5

有没有办法我可以结合使用标签,例如1和3。

给予

   A__66    B__45
0
1
2
3
4
5

我尝试了以下内容,但不起作用

df.columns=df.columns.str.split('__').str[0]+'__'+df.columns.str.split('__').str[2]

4 个答案:

答案 0 :(得分:4)

使用特定的正则表达式替换:

In [124]: df.columns.str.replace(r'__[^_]+__', '__')                                                                          
Out[124]: Index(['A__66', 'B__45'], dtype='object')

答案 1 :(得分:3)

Index.mapf-string一起使用以选择列表的第一和第三值:

df.columns = df.columns.str.split('__').map(lambda x: f'{x[0]}__{x[2]}')
print (df)
   A__66  B__45
0    NaN    NaN
1    NaN    NaN
2    NaN    NaN
3    NaN    NaN
4    NaN    NaN
5    NaN    NaN

答案 2 :(得分:2)

您还可以尝试拆分并加入:

df.columns=['__'.join((i[0],i[-1])) for i in df.columns.str.split('__')]
#Columns: [A__66, B__45]

答案 3 :(得分:2)

我发现您自己的解决方案非常好,并且可能是最易读的。只是需要一点调整

df.columns = df.columns.str.split('__').str[0] + '__' + df.columns.str.split('__').str[-1]
Index(['A__66', 'B__45'], dtype='object')

或者为了提高效率,我们不想两次致电str.split

lst_split = df.columns.str.split('__')
df.columns = lst_split.str[0] + '__' + lst_split.str[-1]
Index(['A__66', 'B__45'], dtype='object')