我有一个包含文件路径列的DataFrame。
我想把它改成只有文件名。
我的DataFrame看起来像:
df = pd.DataFrame({
'Sr No': [18, 19, 20],
'Email': ['Test@test.com', 'Test@test.com', 'Test@test.com'],
'filename': [r'C:/Users\Test.csv', r'C:/Users\Test1.csv',
r'C:/Users\Test1.csv']
})
序列号 | 电子邮件 | 文件名 |
---|---|---|
十八岁 | Test@test.com | C:/Users\Test.csv |
十九岁 | Test@test.com | C:/Users\Test1.csv |
二十 | Test@test.com | C:/Users\Test1.csv |
1.文件名只能是Test和Test1
1.只需要写两次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']
})
序列号 | 电子邮件 | 文件名 |
---|---|---|
十八岁 | Test@test.com | 测试 |
十九岁 | Test@test.com | 测试1 |
二十 | Test@test.com | 测试1 |
我想用python和pandas DataFrame来实现。
我有100行在'文件名'列。
我尝试使用:
import os
import glob
myfile = os.path.basename('C:/Users/Test.csv')
os.path.splitext(myfile)
print(os.path.splitext(myfile)[0])
但它只对一个路径有用,如何将其应用于整个列?
5条答案
按热度按时间lyr7nygr1#
使用
pandas.Series.apply
遍历列,并将结果赋给新列。或
示例:
还有一个使用
pathlib
模块中的Path('C:/Users\Test.csv').name
的选项,但这比os.path.basename
慢,因为pathlib
将string
转换为pathlib
对象。在文件名之前提供斜杠是一致的,最快的选择是使用
pandas.Series.str.split
(例如df['filename'].str.split('\\', expand=True).iloc[:, -1]
)。在
python 3.11.2
和pandas 2.0.0
中测试%timeit
测试结果
b91juud32#
您需要通过重新定义来修改现有列。首先使用pandas阅读它:
这将产生预期的结果作为 Dataframe ,所以你所缺少的就是将其保存回csv/excel:
或csv:
bq3bfh9z3#
将excel文件读入pandas数据框中
然后使用apply函数对整个列执行一个操作,如下所示
roqulrg34#
除了上面的答案,你还可以使用字符串方法:
不知道哪个最快。
vm0i2vca5#
假设你在文件名列中有固定的目录长度: