Python 3.x 拆分和替换Pandas中列名中的特殊字符

Python 3.x 拆分和替换Pandas中列名中的特殊字符,python-3.x,pandas,dataframe,split,Python 3.x,Pandas,Dataframe,Split,我有一个dataframe,它的列名如下: id, xxx>xxx>x, yy>y, zzzz>zzz>zz>z, ... 我需要从右侧按第二个拆分,将替换为-,然后将最后一个元素作为新列名,id,xxx-x,yy-y,zz-z,。 我曾经使用过:“-”.join('zzzzz>zzz>z.rsplit(“>”,2)[-2:]),它给出了:zz-z,但是当我用:“-”.join(df.columns.str.rsplit(“>”) 输出: 使用列表理解: c

我有一个dataframe,它的列名如下:

id, xxx>xxx>x, yy>y, zzzz>zzz>zz>z, ...
我需要从右侧按第二个
拆分,将
替换为
-
,然后将最后一个元素作为新列名,
id,xxx-x,yy-y,zz-z,。

我曾经使用过:
“-”.join('zzzzz>zzz>z.rsplit(“>”,2)[-2:])
,它给出了:
zz-z
,但是当我用:
“-”.join(df.columns.str.rsplit(“>”)

输出:


使用列表理解:

col_names = ["id", "xxx>xxx>x", "yy>y", "zzzz>zzz>zz>z"]

new_names = [col_names[0]] + [
    col_name.split('>')[-2] + '-' + col_name.split('>')[-1]
    for col_name in col_names[1:]
]

print(new_names)
返回:

['id', 'xxx-x', 'yy-y', 'zz-z']
使用正则表达式

Ex:

import re

c = ['id', 'xxx>xxx>x', 'yy>y', 'zzzz>zzz>zz>z']
print([re.sub(r"(.*?)([A-Za-z]+)>([A-Za-z]+)$", r"\2-\3", i) for i in c])
['id', 'xxx-x', 'yy-y', 'zz-z']
输出:

import re

c = ['id', 'xxx>xxx>x', 'yy>y', 'zzzz>zzz>zz>z']
print([re.sub(r"(.*?)([A-Za-z]+)>([A-Za-z]+)$", r"\2-\3", i) for i in c])
['id', 'xxx-x', 'yy-y', 'zz-z']

那么您只是想重命名这些列,对吗?最后的列数将与错误时的列数相同,您确定列中的所有元素都是字符串吗?是的,我认为它们都是字符串。对于这个问题,我有一个更简洁的答案:
df.columns=df.columns.str.rsplit('>',2).str[-2:].str.join('-')
:)