pandas 在一个范围内的下划线处拆分 Dataframe

eqzww0vc  于 2023-03-06  发布在  其他
关注(0)|答案(2)|浏览(144)

我想在下划线的 range 上拆分 Dataframe 中的行,并将拆分值保存到新列中。

Type                                            Name
  Parent                               ABC_US_Test_en-us        
   Child    ABC_12252020_US_Test_Natl_en-us_Home-vs-Away
Subchild                                          break1

例如,我想将ABC_12252020_US_Test_Natl_en-us_Home-vs-Away拆分为US_Test_Natl_en-us的一列和Home-vs-Away的另一列,这样输出如下所示:

Type                                            Name                  Type       Matchup
  Parent                               ABC_US_Test_en-us        
   Child    ABC_12252020_US_Test_Natl_en-us_Home-vs-Away    US_Test_Natl_en-us  Home-vs-Away
Subchild                                          break1

换句话说,我想把第二个和第六个下划线之间的所有内容保存到一个新列,把第六个下划线之后的所有内容保存到另一个新列。

yhxst69z

yhxst69z1#

让我们使用正则表达式模式来提取第2个和第6个下划线之间的匹配组。

cols = ['Type1', 'Matchup']
df[cols] = df['Name'].str.extract(r'.*?_.*?_(.*?_.*?_.*?_.*?)_(.*)')

结果

Type                                          Name               Type1       Matchup
0    Parent                             ABC_US_Test_en-us                 NaN           NaN
1     Child  ABC_12252020_US_Test_Natl_en-us_Home-vs-Away  US_Test_Natl_en-us  Home-vs-Away
2  Subchild                                        break1                 NaN           NaN

正则表达式详细信息

  • .*?_:匹配任何字符零次或多次,但尽可能少地匹配后跟文字下划线的字符。
smdncfj3

smdncfj32#

df = pd.DataFrame({
    'Name': [
        'ABC_US_Test_en-us',
        'ABC_12252020_US_Test_Natl_en-us_Home-vs-Away',
        'break1',
        'a_a_b_b_b_b_c_c']})

def get_infix(txt):
    parts = txt.split('_')
    if len(parts) >= 7:
        return '_'.join(parts[2:6])
    return ''

def get_suffix(txt):
    parts = txt.split('_')
    if len(parts) >= 7:
        return '_'.join(parts[6:])
    return ''

df['infix'] = df.Name.apply(get_infix)
df['suffix'] = df.Name.apply(get_suffix)
df
Name                                         infix              suffix
0   ABC_US_Test_en-us                            
1   ABC_12252020_US_Test_Natl_en-us_Home-vs-Away US_Test_Natl_en-us     Home-vs-Away
2   break1                                       
3   a_a_b_b_b_b_c_c                              b_b_b_b                c_c

通常,可以使用string.split(delimiter)按字符拆分字符串,使用'character'.join(list)进行连接。

相关问题