【问题标题】:Split a string within a pandas DataFrame element and recombine a section of the list在 pandas DataFrame 元素中拆分字符串并重新组合列表的一部分
【发布时间】:2018-01-08 11:16:14
【问题描述】:

我试图弄清楚如何在 pandas 元素中拆分字符串,然后重新组合拆分字符串的一部分。我有以下代码:

import pandas as pd

df = pd.DataFrame({'code': ['PC001-S002_D_CFI4-1_NN','PC001-S002_D_CFI4-1_NN','PC001-S002_D_CFI4-1_NN',
                            'PC001-S002_D_CFI4-1_ER','PC001-S002_D_CFI4-1_ER','PC001-S002_D_CFI4-1_ER']})

df['domain'] = df['code'].str.split("_")

此代码适用于在下划线处拆分字符串。现在我想在列中取出生成的拆分列表并重新组合前三个元素,以便:

PC001-S001_D_CFI4-1_NN ==> PC001-S001_D_CFI4-1

如果我只是应用到一个字符串,我可以这样做:

a = 'PC001-S002_D_CFI4-1_NN'
b = a.split("_")[0:3]
c = "_".join(b)

但是,我尝试将其应用于熊猫,但没有取得多大成功。

任何建议都会受到欢迎。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以使用Series.str.rsplit(...):

    In [11]: df['domain'] = df['code'].str.rsplit('_',1).str[0]
    
    In [12]: df
    Out[12]:
                         code               domain
    0  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
    1  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
    2  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
    3  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
    4  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
    5  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
    

    或者只是删除最后一部分:

    In [7]: df['domain'] = df['code'].str.replace(r'\_\w+?$','')
    
    In [8]: df
    Out[8]:
                         code               domain
    0  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
    1  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
    2  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
    3  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
    4  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
    5  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
    

    【讨论】:

      【解决方案2】:

      使用str[:3] 选择前3 个lists,然后选择join

      df['domain'] = df['code'].str.split("_").str[:3].str.join('_')
      print (df)
      
                           code               domain
      0  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
      1  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
      2  PC001-S002_D_CFI4-1_NN  PC001-S002_D_CFI4-1
      3  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
      4  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
      5  PC001-S002_D_CFI4-1_ER  PC001-S002_D_CFI4-1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-16
        • 2022-12-29
        • 1970-01-01
        • 2015-06-04
        相关资源
        最近更新 更多