如何使用Pandas替换DataFrame某列每行中的目录路径?
解决DataFrame中Filename列目录替换的问题
嘿,我来帮你搞定这个路径替换的问题~你之前的代码之所以没达到预期效果,是因为os.path.dirname(df['Filename'])是把整个Series对象传给了os.path.dirname,但这个函数只能处理单个字符串路径,没法直接作用于整个Series。下面给你两种靠谱的解决方案:
方法一:用apply结合os.path工具函数(推荐)
这个方法跨平台兼容性最好,os.path.join会自动处理不同系统的路径分隔符:
import os import pandas as pd # 假设你的DataFrame是df dst = "/home/mycomp/Images" df['Filename'] = df['Filename'].apply(lambda x: os.path.join(dst, os.path.basename(x)))
原理很简单:对Filename列的每一个路径,先用os.path.basename提取文件名部分,再用os.path.join把目标目录和文件名拼接成新路径。
方法二:用字符串的str方法
如果你确定所有路径都是Unix风格的分隔符,也可以用更简洁的字符串操作:
dst = "/home/mycomp/Images" df['Filename'] = dst + '/' + df['Filename'].str.basename()
或者用正则表达式批量替换原路径的目录部分:
import re df['Filename'] = df['Filename'].str.replace(r'.*/', dst + '/', regex=True)
这里的正则.*\/会匹配最后一个斜杠之前的所有内容,替换成目标目录加斜杠,剩下的就是文件名了。
举个实际效果的例子:原路径/var/www/html/projects/Bundesliga/Match1/STAR_SPORTS_2-20170924-200043-210917-00001.jpg,处理后会变成/home/mycomp/Images/STAR_SPORTS_2-20170924-200043-210917-00001.jpg,完全符合你的需求~
内容的提问来源于stack exchange,提问作者popeye
相关产品推荐
相关产品推荐

