使用Python Pandas按不同字符对字符串进行切片

2024-04-28 05:00:48 发布

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

如何根据不同的字符,如'/-,在dataframe中从左开始对字符串进行切片。,我只想这个角色第一次出现。在

key   name
1   McDonald's
2   CVS/PHARMACY
3   CVS/Store
4   WAL-MART
5   AMAZON.CO

预期结果:

^{pr2}$

我不确定这是否需要使用正则表达式?在


Tags: storekey字符串name角色amazondataframe切片
2条回答

选项1
{><

df['for_group'] = df.name.str.split(r"[\'\/\-\.]", expand=True)[0]

   key          name for_group
0    1    McDonald's  McDonald
1    2  CVS/PHARMACY       CVS
2    3     CVS/Store       CVS
3    4      WAL-MART       WAL
4    5     AMAZON.CO    AMAZON

方案2(最佳方案)
str.extract(我个人更喜欢这个,它会匹配,直到找到您想要的停止字符)

^{pr2}$

第二个选择要快得多:

df = pd.concat([df]*10000)

%timeit df.name.str.split(r"[\'\/\-\.]", expand=True)[0]
141 ms ± 1.8 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit df.name.str.extract(r'(.*)[\'\/\-\.]', expand=False)
72.6 ms ± 397 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

方法1

您可以使用下面的正则表达式,它表示一个单词字符(a-z等)重复一次或多次。这将返回一个数组,您可以从中取出第一个元素。在

import re
df['for_group'] = df['name'].apply(lambda x: re.findall(r"[\w]+", x)[0])

一种更快的正则表达式方法是使用.search(),正如@user3483203所指出的那样

^{pr2}$

方法2

同样,您可以使用:

df['for_group'] = df.name.str.split('\W+').apply(lambda x: x[0])

输出:

^{4}$

相关问题 更多 >