【问题标题】:Extract the string after particular pattern value before and after在特定模式值之前和之后提取字符串
【发布时间】:2020-02-27 13:47:48
【问题描述】:

我有 pandas 数据框,我想提取 pb~ 之后和 _ 或 ' ' 或 '' 之前的值。 所以它就像字符串 pb~value_ 或 pb~value' ' 或 pb~value''。

    import pandas as pd

data = {'PName': ['ag~fbai-churnsoon_mk~de_at~lia_sa~fcs_tg~fbai_ts~alldevice-allgender-13-65_md~c_pb~fcbk_rt~cpm',
                  'pb~precision disclosed desktop_sz~300x600_pd~halfp-dmp-hubble w tablets_ch~dis_dt~dt_fm~ban_it~poe_vv~si_ad~as_rt~cpm_tg~rtg_sa~redc_ts~none_md~w_ff~pr-teas-rt']}

# Creates pandas DataFrame.
df = pd.DataFrame(data)
print(df)
# print the data

预期输出

    PName                                                                                                                                                               Values
    ag~fbai-churnsoon_mk~de_at~lia_sa~fcs_tg~fbai_ts~alldevice-allgender-13-65_md~c_pb~fcbk_rt~cpm                                                                      fcbk
    pb~precision disclosed desktop_sz~300x600_pd~halfp-dmp-hubble w tablets_ch~dis_dt~dt_fm~ban_it~poe_vv~si_ad~as_rt~cpm_tg~rtg_sa~redc_ts~none_md~w_ff~pr-teas-rt     precision

我试过了

df['value'] = df['PName'].str.extract("")

但无法弄清楚如何提取值。

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:
    import pandas as pd
    import re
    data = {'PName': ['ag~fbai-churnsoon_mk~de_at~lia_sa~fcs_tg~fbai_ts~alldevice-allgender-13-65_md~c_pb~fcbk_rt~cpm',
                      'pb~precision disclosed desktop_sz~300x600_pd~halfp-dmp-hubble w tablets_ch~dis_dt~dt_fm~ban_it~poe_vv~si_ad~as_rt~cpm_tg~rtg_sa~redc_ts~none_md~w_ff~pr-teas-rt']}
    
    # Creates pandas DataFrame.
    df = pd.DataFrame(data)
    
    df['value'] = df['PName'].apply(lambda x :re.findall('pb~([\s\S]*?)(?:_| )',x)[0])
    df
        PName   value
    0   ag~fbai-churnsoon_mk~de_at~lia_sa~fcs_tg~fbai_...   fcbk
    1   pb~precision disclosed desktop_sz~300x600_pd~h...   precision
    

    【讨论】:

      【解决方案2】:

      尝试非贪婪(惰性)匹配

      df['PName'].str.extract(r'pb~(.+?)[_ ]')
      
      Out[55]:
                 0
      0  fcbk
      1  precision
      

      【讨论】:

        猜你喜欢
        • 2022-11-24
        • 1970-01-01
        • 2017-07-19
        • 2019-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 1970-01-01
        相关资源
        最近更新 更多