三行代码  ›  专栏  ›  技术社区  ›  Luka Savic

从具有的一列生成3列。应用于数据帧

  •  0
  • Luka Savic  · 技术社区  · 1 月前

    我想从每一行中提取一些数据,并为现有或新的dataframe创建新的列,而无需重复执行相同的re操作。火柴

    下面是dataframe的一个条目的外观:

    00:00 Someones_name: some text goes here
    

    我有一个正则表达式,它成功地接受了我需要的3个组:

    re.match(r"^(\d{2}:\d{2}) (.*): (.*)$", x)
    

    我面临的问题是,如何获取matched\u part[1]、[2]和[3],而不必再次实际匹配每个新列。

    我不想要的解决方案是:

    new_df['time'] = old_df['text'].apply(function1)`
    new_df['name'] = old_df['text'].apply(function2)`
    new_df['text'] = old_df['text'].apply(function3)`
    
    def function1(x):
      return re.match(r"^(\d{2}:\d{2}) (.*): (.*)$", x)[1]
    
    1 回复  |  直到 1 月前
        1
  •  2
  •   Ben.T    1 月前

    您可以使用 str.extract 用你的模式

    df[['time','name', 'text']] = df['col1'].str.extract(r"^(\d{2}:\d{2}) (.*): (.*)$")
    print(df)
    #                                        col1   time           name  \
    # 0  00:00 Someones_name: some text goes here  00:00  Someones_name   
    
    #                   text  
    # 0  some text goes here