Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多次拆分字符串并将结果作为新数据帧返回_Python_Regex_String_Pandas_Dataframe - Fatal编程技术网

Python 多次拆分字符串并将结果作为新数据帧返回

Python 多次拆分字符串并将结果作为新数据帧返回,python,regex,string,pandas,dataframe,Python,Regex,String,Pandas,Dataframe,我正在反复尝试拆分熊猫专栏。我想找到两个字符串之间的字符串,无限期。例如,假设我有以下输入中的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&

我正在反复尝试拆分熊猫专栏。我想找到两个字符串之间的字符串,无限期。例如,假设我有以下输入中的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)
然后,我想通过打开和关闭引号来拆分这些字符串,
“…”
,然后获取其中的内容。因此,我的最终输出将是:

有人能帮我吗?
谢谢。

让我们在这里使用
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
模式
“(.*?”
查找单引号内字符串的所有实例。更多信息-

”#匹配开场白
(#开放捕获组
*?#任何东西都不贪婪匹配
)#捕获组结束
“#匹配收盘报价
要将其与
df
合并,您可以使用
join

v = df.join(df['Practice Column']
    .str.extractall(r"'(.*?)'").unstack(1)[0].fillna(''))
或者,将“练习栏”分配回:


另一个具有列表理解功能的解决方案(用于性能)

如果存在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

就这样。谢谢我不能接受它作为解决方案在12分钟内的网站说,但我会尽快。你能花点时间解释一下r“(*?”)吗。我相信是regex。@J.Dykstra在答案中编辑了一些解释。这是否保留了顺序?如中所示,如果我重新合并以获得我的原始实践专栏,我基本上可以将它们彼此相邻吗?@J.Dykstra结果解决方案的简单性取决于您的专栏是否具有NAN。这可能吗?啊哈,谢谢!我的错!我不是故意纠缠的!祝您今天过得愉快!
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
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