使用Python Pandas按不同的字符切割字符串

时间:2018-06-15 21:19:32

标签: python regex pandas

如何根据不同的字符(例如'/ - )从数据帧中切割字符串,从左开始。 ,我只想第一次出现这个角色。

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

期待结果:

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

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

2 个答案:

答案 0 :(得分:4)

选项1
使用 str.split

expand=True
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 (我个人更喜欢这个,它会匹配,直到找到您想要的停止字符之一)

df.name.str.extract(r'(.*?)[\'\/\-\.]', expand=False)

0    McDonald
1         CVS
2         CVS
3         WAL
4      AMAZON

这里的第二个选择要快得多:

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 :(得分:2)

方法1

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

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

更快的正则表达式方法是使用{user3483203指出的.search()

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

方法2

同样,您可以使用:

df['for_group'] = df.name.str.split('\W+').apply(lambda x: x[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