问题描述
我有一个数据列,其列名称如下:
id,xxx>xxx>x,yy>y,zzzz>zzz>zz>z,...
我需要从右侧将第二个>
分开,将>
替换为-
,然后将最后一个元素用作新列名id,xxx-x,yy-y,zz-z,....
我使用过:"-".join('zzzz>zzz>zz>z'.rsplit(">",2)[-2:])
,它给出了:zz-z
,但是当我将其应用于所有列名称时,它们是:"-".join(df.columns.str.rsplit(">")[-2:])
出局:
TypeError: sequence item 0: expected str instance,list found
解决方法
使用列表理解:
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']
,
使用正则表达式。
例如:
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','zz-z']