从字符串

时间:2017-07-13 02:21:31

标签: python string pandas

我有类似下面的示例数据的数据,我正在尝试模式匹配并解析它以创建类似输出数据的东西。我的想法是,如果我有一个字符串值包含“Aggr(”然后在括号中解析“stuff”并解析下一个括号前面的逗号后面的“某事”。有没有一个光滑的方法来做到这一点与正则表达式一样,还是需要几个循环?

Sample Data:

SampleDf=pd.DataFrame([['tom',"words Aggr(stuff),something1)"],['bob',"Morewords Aggr(Diffstuff),something2"]],columns=['ReportField','OtherField'])

Sample Output:

OutputDf=pd.DataFrame([['tom',"words Aggr(stuff),something1",'stuff', 'something1'],['bob',"Morewords Aggr(Diffstuff),something2",'Diffstuff','something2']],columns=['ReportField','OtherField','Part1','Part2'])

2 个答案:

答案 0 :(得分:3)

您可以使用str.extract捕获字符串中的模式,并将每个模式转换为一列:

pd.concat([
        SampleDf, 
        SampleDf.OtherField.str.extract(r"Aggr\((?P<Part1>.*?)\),(?P<Part2>[^\(]*)", expand=True)
    ], axis=1)

#   ReportField                             OtherField      Part1        Part2
#0          tom           words Aggr(stuff),something1      stuff   something1
#1          bob   Morewords Aggr(Diffstuff),something2  Diffstuff   something2

正则表达式 Aggr\\((?P<Part1>.*?)\\),(?P<Part2>[^\\(]*)捕获您需要的两种模式(其中一种模式为Aggr\\((?P<Part1>.*?)\\),名为 part1 之后的第一个括号中的内容Aggr ,另一个是名为 part2 ,(?P<Part2>[^\\(]*):在下一个括号之前的第一个模式之后的逗号之后的模式。)

答案 1 :(得分:1)

您可以将str.extractall与正则表达式模式匹配

一起使用
SampleDf[['Part1', 'Part2']]=SampleDf.OtherField.str.extractall('\((.*)\),(.*)').reset_index(drop = True)

你得到了

    ReportField OtherField                              Part1       Part2
0   tom         words Aggr(stuff),something1            stuff       something1
1   bob         Morewords Aggr(Diffstuff),something2    Diffstuff   something2