4 回答
TA贡献1878条经验 获得超4个赞
这是一种使用方法str.replace:
df = pd.DataFrame({'Col1': ['Table_A112', 'Table_A_112', 'Table_112_avs']})
print(df)
Col1
0 Table_A112
1 Table_A_112
2 Table_112_avs
df.Col1.str.replace(r'(?:^|_)(\d+)(?:$|_)', '_', regex=True)
0 Table_A112
1 Table_A_
2 Table_avs
Name: Col1, dtype: object
TA贡献1877条经验 获得超6个赞
如果您坚持使用正则表达式解决方案,您可以使用pandas.replace()并积极向后看r'(?<=_)\d+'
import pandas as pd
from tabulate import tabulate
df = pd.DataFrame({'Col1': ['Table_A112', 'Table_A_112']})
print(tabulate(df, headers='keys', tablefmt='psql'))
df= df.replace(regex=r'(?<=_)\d+', value='')
print(tabulate(df, headers='keys', tablefmt='psql'))
这会产生所需的输出。
TA贡献1843条经验 获得超7个赞
我认为str.replace与捕获组一起使用会使模式更简单
sample df
Out[1063]:
Col1
0 Table_A112
1 Table_A_112
2 Table_111_B
df.Col1.str.replace(r'(_)\d+', r'\1')
Out[1064]:
0 Table_A112
1 Table_A_
2 Table__B
Name: Col1, dtype: object
TA贡献1830条经验 获得超9个赞
您可以执行以下操作:
s = df['Col1'].str.split('_',expand=True).stack()
s.mask(s.str.isdigit(), '').groupby(level=0).agg('_'.join)
输出:
0 Table_A112
1 Table_A_
dtype: object
添加回答
举报
