Python 使用pandas系列从文件中获取文件夹路径

Python 使用pandas系列从文件中获取文件夹路径,python,pandas,substring,filenames,series,Python,Pandas,Substring,Filenames,Series,我正在使用pandas处理文件路径列表,需要提取文件夹路径 因此,来自: /volume1/SYN/FOLDER1/FILE.TXT /volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF 我需要获取文件夹路径: /volume1/SYN/FOLDER1/ /volume1/SYN/FOLDER2/SUBFOLDER/ 我找到了一种获取文件名而不是文件夹路径的方法 data['index'] = data['File'].str.split('/').str[-1]

我正在使用pandas处理文件路径列表,需要提取文件夹路径

因此,来自:

/volume1/SYN/FOLDER1/FILE.TXT
/volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF
我需要获取文件夹路径:

/volume1/SYN/FOLDER1/
/volume1/SYN/FOLDER2/SUBFOLDER/
我找到了一种获取文件名而不是文件夹路径的方法

data['index'] = data['File'].str.split('/').str[-1]
有什么想法吗?

使用:

如果没有缺失值和性能很重要:

data['index'] = [x.rsplit('/', 1)[0] + '/' for x in data['File']]


print (data)
                                      File                            index
0            /volume1/SYN/FOLDER1/FILE.TXT            /volume1/SYN/FOLDER1/
1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF  /volume1/SYN/FOLDER2/SUBFOLDER/
您可以通过列表理解或使用自定义函数应用来使用和提取第一次拆分

from os.path import splitext

df = pd.DataFrame({'filepaths': [r'/volume1/SYN/FOLDER1/FILE.TXT',
                                 r'/volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF']})

# list comprehension, more efficient
df['folder'] = [splitext(x)[0] for x in df['filepaths']]

# apply + lambda implicit loop
df['folder'] = df['filepaths'].apply(lambda x: splitext(x)[0])

print(df)

                                 filepaths  \
0            /volume1/SYN/FOLDER1/FILE.TXT   
1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF   

                                folder  
0            /volume1/SYN/FOLDER1/FILE  
1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE  
库将pathlib包装为任何系列或索引上的
.path
访问器。该功能使本案例非常简单:

将熊猫作为pd导入
从路径导入路径
files=pd.Series([
“/volume1/SYN/FOLDER1/FILE.TXT”,
“/volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF”,
])
#.通过导入路径创建的路径访问器
files.path.parent
#>0/卷1/同步/文件夹1
#>1/volume1/SYN/FOLDER2/子文件夹
#>数据类型:对象

在太平洋标准时间2021-03-06 22:21:15由v0.4.2创建,我喜欢这个答案。
from os.path import splitext

df = pd.DataFrame({'filepaths': [r'/volume1/SYN/FOLDER1/FILE.TXT',
                                 r'/volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF']})

# list comprehension, more efficient
df['folder'] = [splitext(x)[0] for x in df['filepaths']]

# apply + lambda implicit loop
df['folder'] = df['filepaths'].apply(lambda x: splitext(x)[0])

print(df)

                                 filepaths  \
0            /volume1/SYN/FOLDER1/FILE.TXT   
1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE.PDF   

                                folder  
0            /volume1/SYN/FOLDER1/FILE  
1  /volume1/SYN/FOLDER2/SUBFOLDER/FILE