如何移除DataFrame中file_name列路径的前5个目录?
问题解决方法
你报错的原因是:file_paths = [x[5:] for x in file_paths]生成的是列表的列表(每个元素都是类似['f', 'file1.c']的子列表),而"".join()只能拼接字符串序列,把列表直接塞进去自然会触发类型错误。
下面是几种可行的解决方式:
方法1:Pandas链式字符串操作(最简洁高效)
直接用Pandas的str方法链式处理,无需手动循环:
# 拆分路径 → 取从第6个元素开始的部分 → 用/拼接成完整路径 df_function["file_name"] = df_function["file_name"].str.split("/").str[6:].str.join("/")
为什么用str[6:]?因为你的路径/a/b/c/d/e/f/file1.c用/拆分后会得到['', 'a', 'b', 'c', 'd', 'e', 'f', 'file1.c']:
- 索引0是空字符串(对应路径开头的
/) - 索引1-5是你要移除的前5个目录(a到e)
- 从索引6开始就是需要保留的部分(f和file1.c)
方法2:手动循环处理
如果习惯写循环逻辑,记得给每个子列表单独做拼接:
file_paths = df_function["file_name"].str.split("/") # 遍历每个拆分后的子列表,截取目标部分再用/拼接 new_file_paths = ["/".join(x[6:]) for x in file_paths] df_function["file_name"] = new_file_paths
方法3:用pathlib处理(更稳健)
如果路径存在特殊情况(比如相对路径、重复/),用pathlib处理更靠谱:
from pathlib import Path def trim_path(path): parts = Path(path).parts # 跳过前6个路径部分,拼接剩余内容 return "/".join(parts[6:]) df_function["file_name"] = df_function["file_name"].apply(trim_path)
内容的提问来源于stack exchange,提问作者user3555115
相关产品推荐
相关产品推荐

