Pandas 列标题拆分

Pandas 列标题拆分,pandas,dataframe,Pandas,Dataframe,我有一个带有colums标头的数据帧,它由3个标记组成,这些标记由“\uu_”分割 例如 我知道我不能拆分标题,而只是将第一个标记与此代码一起使用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.spli

我有一个带有colums标头的数据帧,它由3个标记组成,这些标记由“\uu_”分割

例如

我知道我不能拆分标题,而只是将第一个标记与此代码一起使用
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]

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

In [124]: df.columns.str.replace(r'__[^_]+__', '__')                                                                          
Out[124]: Index(['A__66', 'B__45'], dtype='object')
f-string
s一起用于选择列表的第一个和第三个值:

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

您还可以尝试拆分和合并:

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

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

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

或者为了提高效率,我们不想调用
str.split
两次:

lst_split = df.columns.str.split('__')
df.columns = lst_split.str[0] + '__' + lst_split.str[-1]

@Erfan-yop,如果需要列表的最后一个值,那么它是必需的。
Index(['A__66', 'B__45'], dtype='object')
lst_split = df.columns.str.split('__')
df.columns = lst_split.str[0] + '__' + lst_split.str[-1]
Index(['A__66', 'B__45'], dtype='object')