在Pandas的列名称中拆分和替换特殊字符

问题描述

我有一个数据列,其列名称如下:

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']

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...