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