如何用pandas替换列的每一行中的目录路径?

时间:2018-03-22 14:33:05

标签: python pandas dataframe

我有一个python数据框,其文件名列如下所示:

 if ($("#source svg text[text-anchor='end']").length > 0){
        var n = $("#source svg text[text-anchor='end']").length;
        $("#source svg text[text-anchor='end']")[n-5].innerHTML = "";
        $("#source svg text[text-anchor='end']")[n-4].innerHTML = "Create your own legend";
        $("#source svg text[text-anchor='end']")[n-3].innerHTML = "Create your own legend";
        $("#source svg text[text-anchor='end']")[n-2].innerHTML = "Create your own legend";
        $("#source svg text[text-anchor='end']")[n-1].innerHTML = "";
    }

从Filename列我想用新的目标目录名替换目录名。

Filename
/var/www/html/projects/Bundesliga/Match1/STAR_SPORTS_2-20170924-200043-210917-00001.jpg
/var/www/html/projects/Bundesliga/Match1/STAR_SPORTS_2-20170924-200043-210917-00001.jpg

我尝试了以下内容:

dst = "/home/mycomp/Images'

但是我收到以下错误。

df['Filename'] = df['Filename'].str.replace(os.path.dirname(df['Filename']), dst)

3 个答案:

答案 0 :(得分:2)

df['Filename'] = df['Filename'].apply(lambda x: x.replace(os.path.dirname(x), dst))

答案 1 :(得分:1)

问题出在os.path.dirname(df['Filename']):您正在Series传递str。您可以filenames = df['Filename'].str.split('/').str[-1]获取不带目录的文件名,然后dst + '/' + filenames获取新路径。最好定义dst = '"/home/mycomp/Images/'

答案 2 :(得分:0)

这是使用正则表达式的一种方法。

import os, re

dst = r'/home/mycomp/Images'

paths = '|'.join([re.escape(s) for s in set(df['Filename'].map(os.path.dirname))])

df['Filename'] = df['Filename'].str.replace(paths, dst)

#                                             Filename
# 0  /home/mycomp/Images/STAR_SPORTS_2-20170924-200...
# 1  /home/mycomp/Images/STAR_SPORTS_2-20170924-200...

<强>解释

  • 提取所有目录,转义特殊字符,然后合并为由| [regex或]分隔的单个字符串。这样可以确保替换系列中的所有路径。
  • 使用os.path.dirname提取跨平台的正确路径。
  • pd.Series.str.replace与正则表达式一起使用dst输入替换所有路径。