[英]slice a string by different characters using Python 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
我不確定是否需要使用正則表達式?
選項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
您可以使用下面的正則表達式,這表示一個單詞字符(az等)重復了一次或多次。 這將返回一個數組,您可以刪除第一個元素。
import re
df['for_group'] = df['name'].apply(lambda x: re.findall(r"[\w]+", x)[0])
正則表達式的一種更快的方法是使用@ user3483203指出的.search .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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.