pandas 正则表达式:获取空格和冒号之间的子字符串

cpjpxq1n  于 2023-01-07  发布在  其他
关注(0)|答案(4)|浏览(158)

我有一个列为store的Pandas Dataframe ,它包含一个如下所示的商店列表:

H-E-B 721:1101 W STAN SCHLUETER LOOP,KILLEEN,TX
H-E-B PLUS 39:2509 N MAIN ST,BELTON,TX

我需要商店编号,在上面的例子中是72139
下面是我获得它的过程:
1.找出冒号的位置。
1.向后切片,直到到达一个空间。
在Python/Pandas中我该怎么做呢?我猜我需要使用regex,但是我不知道如何开始。

stszievb

stszievb1#

您可以将str.extract(\d+):正则表达式一起使用:

df['number'] = df['store'].str.extract('(\d+):', expand=False).astype(int)

输出:

store  number
0  H-E-B 721:1101 W STAN SCHLUETER LOOP,KILLEEN,TX     721
1           H-E-B PLUS 39:2509 N MAIN ST,BELTON,TX      39

regex demo

35g0bw71

35g0bw712#

可以将函数应用于store列

def retrieve_store_number(text):
    return text.split(":")[0].split()[-1]

df["store_number"] = df.store.apply(retrieve_store_number)
pepwfjgg

pepwfjgg3#

要在Pandas中使用regex,可以使用extract函数:

df['store_number'] = df['store'].str.extract(r'(\d+(?=:))')
jv4diomz

jv4diomz4#

你可以这样做:

def extract_number(string: str) -> int:
    return [int(i.split(":")[0]) for i in string.split(" ") if ":" in i][0]
df = pd.DataFrame([["H-E-B 721:1101 W STAN SCHLUETER LOOP,KILLEEN,TX"],
                   ["H-E-B PLUS 39:2509 N MAIN ST,BELTON,TX"]], columns = ["store"])
df["number"] = df["store"].apply(extract_number)

相关问题