如何从Pandas DataFrame中的路径获取基本文件名

2022-03-02 00:00:00 python pandas dataframe data-science

问题描述

我有一个包含文件路径列的DataFrame。

我只想将其更改为文件名。

我的DataFrame如下所示:

df = pd.DataFrame({
    'Sr No': [18, 19, 20],
    'Email': ['Test@test.com', 'Test@test.com', 'Test@test.com'],
    'filename': [r'C:/UsersTest.csv', r'C:/UsersTest1.csv',
                 r'C:/UsersTest1.csv']
})
sr否 电子邮件 文件名
18 test@test.com C:/UsersTest.csv
19 test@test.com C:/UsersTest1.csv
20 test@test.com C:/UsersTest1.csv
  1. 文件名应仅为测试和测试1
  2. 只需编写Test@test.com两次,即一次用于Test.csv,另一次用于Test1.csv。

简而言之,我的输出应该如下所示:

df = pd.DataFrame({
    'Sr No': [18, 19, 20],
    'Email': ['Test@test.com', 'Test@test.com', 'Test@test.com'],
    'filename': ['Test', 'Test1', 'Test1']
})
sr否 电子邮件 文件名
18 test@test.com 测试
19 test@test.com 测试1
20 test@test.com 测试1

我想使用Python和 pandas DataFrame完成此操作。

我在"filename"列中有100行。

我尝试使用:

import os

import glob

myfile = os.path.basename('C:/Users/Test.csv')
os.path.splitext(myfile)
print(os.path.splitext(myfile)[0])

但只对一条路径有用,如何将其应用到整列?


解决方案

使用Apply Function获取迭代所有列并获取分配给新列的函数输出(pd.Series)

df["filename"] = df["filename"].apply(os.path.basename)

df["filename"] = df["filename"].apply(lambda path: os.path.basename(path))

示例:

>>> df
   Sr No          Email            filename
0     18  Test@test.com   C:/UsersTest.csv
1     19  Test@test.com  C:/UsersTest1.csv
2     20  Test@test.com  C:/UsersTest1.csv
>>> df["filename"] = df["filename"].apply(os.path.basename)
>>> df
   Sr No          Email   filename
0     18  Test@test.com   Test.csv
1     19  Test@test.com  Test1.csv
2     20  Test@test.com  Test1.csv

相关文章