在Python的数据框中的两个子串中选择字符串到每一行

问题描述 投票:3回答:1

我希望能够在两个特定子串之间选择一个字符串(如下所示),但是有一个循环将迭代数据帧中的每一行。

码:

import pandas as pd

df = pd.DataFrame(['first: hello1 \nSecond this1 is1 a1 third: test1\n', 'first: hello2 \nSecond this2 is2 a2 third: test2\n', 'first: hello3 \nSecond this3 is3 a3 third: test3\n'])
df = df.rename(columns={0: "text"})

def find_between(df, start, end):
  return (df.split(start))[1].split(end)[0]

df2 = df['text'][0]
print(find_between(df3, 'first:', '\nSecond'))

[OUTPUT NEEDED]数据帧,包含以下信息:

   output
0  hello1
1  hello2
2  hello3

find_between()函数是基于Find string between two substrings创建的,但是在这里你只能对一个已经保存为字符串的特定变量(df2)执行此操作,如图所示。我需要能够为'df'数据帧中的每一行(字符串)执行此操作。

如果有人能帮助我,我真的很感激!谢谢!

python string python-3.x pandas substring
1个回答
2
投票

为什么定义一个函数?你可以使用str.extract

start = 'first'
end = '\nSecond'

df.text.str.extract(r'(?<={})(.*?)(?={})'.format(start, end), expand=False)

0    : hello1 
1    : hello2 
2    : hello3 
Name: text, dtype: object

细节

(?<=   # lookbehind
first
)
(      # capture-group
.*?    # non-greedy match
)
(?=    # lookahead
\nSecond
)

捕捉到了后视镜头和前瞻镜头之间的所有东西。


你可以几次打电话给str.split,但这并不是那么优雅:

df.text.str.split(start).str[1].str.split(end).str[0]

0    : hello1 
1    : hello2 
2    : hello3 
Name: text, dtype: object
© www.soinside.com 2019 - 2024. All rights reserved.