Python - Pandas - 只删除只有数字的拆分,但如果它有字母则保持

Posted

技术标签:

【中文标题】Python - Pandas - 只删除只有数字的拆分,但如果它有字母则保持【英文标题】:Python - Pandas - Remove only splits that only numeric but maintain if it have alphabetic 【发布时间】:2020-05-28 08:03:53 【问题描述】:

我有一个有两个值的数据框:

df = pd.DataFrame('Col1': ['Table_A112', 'Table_A_112'])

我要做的是在 split('_') 只有数字的情况下删除数字。 所需的输出是:

Table_A112
Table_A_

为此,我使用以下代码:

import pandas as pd
import difflib
from tabulate import tabulate
import string

df = pd.DataFrame('Col1': ['Table_A112', 'Table_A_112'])
print(tabulate(df, headers='keys', tablefmt='psql'))
df['Col2'] = df['Col1'].str.rstrip(string.digits)
print(tabulate(df, headers='keys', tablefmt='psql'))

但它给了我以下输出:

Table_A
Table_A_

怎样才能做我想做的事?

谢谢!

【问题讨论】:

Table_112_A 的预期是什么? 在这种情况下应该是'Table__A' 【参考方案1】:

我认为将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

【讨论】:

【参考方案2】:

如果您坚持使用正则表达式解决方案,您可以使用 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'))

这会产生所需的输出。

【讨论】:

【参考方案3】:

这是使用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

见demo

【讨论】:

OP 希望在第二个结果后面加上下划线。也许替换为_ @yatu Table_112_A 将产生 Table_A 但 OP 请求 Table__A(参见上面的 cmets)。【参考方案4】:

你可以这样做:

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

【讨论】:

很好,我也应该使用堆栈:)

以上是关于Python - Pandas - 只删除只有数字的拆分,但如果它有字母则保持的主要内容,如果未能解决你的问题,请参考以下文章

pandas取后四位值

使用 pandas 和 Python 删除重复项

python dataframe pandas使用int删除列

使用 Pandas 删除 Python 中的多余行 [重复]

从 csv 和训练中删除重复数据(Keras、python、pandas)

Python,Pandas,数据框 - 拆分和删除单元格的某些部分