如何在Pandas列中逆转修剪字符串

2024-10-04 11:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe列值

"assdffjhjhjh(12tytyttyt)bhhh(AS7878788)"

我需要从后面修剪它,即我的结果值应该是AS7878788。你知道吗

我正在做以下工作:

newdf=pd.DataFrame(df.COLUMNNAME.str.split('(',1).tolist(),columns = ['col1','col2'])
df['newcol'] = newdf['col2'].str[:10]

在上面的Dataframe列中,这给出了输出“12tyttyt”,但是我的预期输出是“as788”

有人能帮忙吗?你知道吗


Tags: columnsdataframedfcol2pdsplitstr列值
2条回答

您可以使用正则表达式来查找“两个括号之间的值”的所有实例,然后拉出最后一个实例。例如,如果我们有以下数据:

df = pd.DataFrame({'col': ['assdffjhjhjh(12tytyt)bhhh(AS7878788)',
                           'asjhgdv(abjhsgf)(abjsdfvhg)afdsgf']})

我们确实:

df['col'] = df['col'].str.findall(r'\(([^\(^\)]+)\)').str[-1]

这让我们:

         col
0  AS7878788
1  abjsdfvhg

为了解释正则表达式正在做什么,它试图找到我们拥有的所有实例:

\(             # an open bracket
([^\(^\)]+)    # anything that isn't an open bracket or a close bracket for one or more characters
\)             # a close bracket

如果我们从前面语句的末尾取.str[-1],我们可以看到这是如何工作的,正如df['col'] = df['col'].str.findall(r'\(([^\(^\)]+)\)')给我们的:

                    col
0  [12tytyt, AS7878788]
1  [abjhsgf, abjsdfvhg]

让我们首先在纯Python中使用一个常规字符串:

x = "assdffjhjhjh(12tytyt)bhhh(AS7878788)"

res = x.rsplit('(', 1)[-1][:-1]  # 'AS7878788'

在这里,我们从右开始按开括号拆分(为了提高效率,将拆分计数限制为1),提取最后一个拆分,并提取除最后一个字符以外的所有字符。你知道吗

然后,您可以通过pd.Series.str方法将此应用于熊猫:

df['col'] = df['col'].str.rsplit('(', 1).str[-1].str[:-1]

下面是一个演示:

df = pd.DataFrame({'col': ["assdffjhjhjh(12tytyt)bhhh(AS7878788)"]})

df['col'] = df['col'].str.rsplit('(', 1).str[-1].str[:-1]

print(df)

         col
0  AS7878788

请注意,上面的解决方案非常特定于作为示例提供的字符串。要获得更灵活的选择,请考虑使用regex。你知道吗

相关问题 更多 >