使用 .apply on dataframe 从一列生成 3 列

Generating 3 columns from one with .apply on dataframe

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

数据框的一个条目如下所示:

00:00 Someones_name: some text goes here

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

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

我遇到的问题是,如何获取 matched_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]

您可以将 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