簡體   English   中英

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

[英]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.splitexpand=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM