首页 > 解决方案 > 在特定模式值之前和之后提取字符串

问题描述

我有熊猫数据框,我想在 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.xpandas

解决方案


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

推荐阅读