多次拆分字符串并将结果作为新的DataFram返回

2024-09-30 20:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在反复尝试拆分一个列。我想找到两个字符串之间的字符串,无限期。例如,假设我有下面输入的pandas列:

import numpy as np
import pandas as pd

data=np.array([["'abc'ad32kn'def'dfannasfl[]12a'ghi'"],
              ["'jk'adf%#d1asn'lm'dfas923231sassda"],
              ["'nop'ad&@*-0'qrs'd2&*@^#!!sda'tuv'dasdj_23'w'823a&@'xyz'adfa"]])

df = pd.DataFrame({'Practice Column': data.ravel()})

print(df)

然后,我想通过打开和关闭引号'...'来拆分这些字符串,然后获取其中的内容。所以,我的最终结果是:

enter image description here

有人能帮我吗? 谢谢。你知道吗


Tags: 字符串importnumpypandasdfdatadefas
1条回答
网友
1楼 · 发布于 2024-09-30 20:32:44

让我们在这里使用extractall

df['Practice Column'].str.extractall(r"'(.*?)'").unstack(1)[0].fillna('')

match    0    1    2  3    4
0      abc  def  ghi        
1       jk   lm             
2      nop  qrs  tuv  w  xyz

模式'(.*?)'在单引号中查找字符串的所有实例。更多信息-

'      # Match opening quote
(      # Open capture group
.*?    # Non-greedy match for anything
)      # End of capture group
'      # Match closing quote

要将其与df合并,可以使用join

v = df.join(df['Practice Column']
    .str.extractall(r"'(.*?)'").unstack(1)[0].fillna(''))

或者,将“练习栏”指定回:

v = df['Practice Column'].str.extractall(r"'(.*?)'").unstack(1)[0].fillna('')
v.insert(0, 'Practice Column', df['Practice Column'])

print(v)

match                                    Practice Column    0    1    2  3    4
a                    'abc'ad32kn'def'dfannasfl[]12a'ghi'  abc  def  ghi        
b                     'jk'adf%#d1asn'lm'dfas923231sassda   jk   lm             
c      'nop'ad&@*-0'qrs'd2&*@^#!!sda'tuv'dasdj_23'w'8...  nop  qrs  tuv  w  xyz

另一个解决方案与列表理解(性能)。你知道吗

import re

p = re.compile("'(.*?)'")    
pd.DataFrame([
    p.findall(s) for s in df['Practice Column']]).fillna('')

     0    1    2  3    4
0  abc  def  ghi        
1   jk   lm             
2  nop  qrs  tuv  w  xyz

如果存在nan,这将不起作用,因此这里是上面解决方案的一个修改版本。你得先放下南号。你知道吗

pd.DataFrame([
    p.findall(s) for s in df['Practice Column'].dropna()]
).fillna('')

     0    1    2  3    4
0  abc  def  ghi        
1   jk   lm             
2  nop  qrs  tuv  w  xyz

相关问题 更多 >