基于已有pandas DataFrame创建新列提取文件版本与销售ID
pandas实现S3路径字段提取方案
你可以用pandas内置的字符串处理方法实现需求,两种常用实现方式如下:
方式1:正则提取(推荐,适配固定文件名格式场景)
直接通过str.extract匹配你文件名中{sales_id}_{version}.snappy.parquet的固定格式,一步提取两个目标字段:
import pandas as pd # 假设你的原DataFrame变量名为df # 正则分组分别匹配sales_id和version df[["sales_id", "version"]] = df["key"].str.extract(r"(\d+)_(\d+)\.snappy\.parquet") # 可选:将两个字段转为整数类型 df["sales_id"] = df["sales_id"].astype(int) df["version"] = df["version"].astype(int) # 移除不需要的last_modified_time列,得到目标结构 df = df.drop(columns=["last_modified_time"])
方式2:字符串拆分(适配文件名后缀可变场景)
如果后续你的文件后缀可能变化,可以通过分层拆分路径、文件名实现字段提取:
# 提取最后一级路径的文件名 df["file_name"] = df["key"].str.split("/").str[-1] # 去掉文件后缀后按下划线拆分得到两个目标字段 df[["sales_id", "version"]] = df["file_name"].str.rsplit(".", n=1).str[0].str.split("_", expand=True) # 类型转换+清理冗余列操作和方式1一致 df["sales_id"] = df["sales_id"].astype(int) df["version"] = df["version"].astype(int) df = df.drop(columns=["file_name", "last_modified_time"])
两种方式运行后得到的df结构和你需要的目标结果完全一致。
内容的提问来源于stack exchange,提问作者Dcook
相关产品推荐
相关产品推荐

