如何使用python和dataframe从excel中的路径获取基本文件名
我有一个excel的文件路径列。我想将其更改为仅文件名。 e、 g.如下图所示如何使用python和dataframe从excel中的路径获取基本文件名,python,pandas,dataframe,data-science,Python,Pandas,Dataframe,Data Science,我有一个excel的文件路径列。我想将其更改为仅文件名。 e、 g.如下图所示 文件名应仅为Test和Test1 只需要写Test@test.com两次ie,一次用于Test.csv,另一次用于Test1.csv。 简而言之,下图是我的要求 我想使用python和pandas/dataframe来实现它。 “文件名”列中有100行。 我试着使用; 导入操作系统 import glob myfile=os.path.basename('C:/Users/Test.csv') os.path.s
简而言之,下图是我的要求
import glob
myfile=os.path.basename('C:/Users/Test.csv')
os.path.splitext(myfile)
print (os.path.splitext(myfile)[0])
但它对于一个路径很有用,如何将它应用于整个列
谢谢 使用apply函数迭代所有列,并获得分配给新列的函数输出(
pd.series
)
df["filename"] = df["filename"].apply(os.path.basename)
或
例如:
>>> df
filename
0 a/b/c/d.txt
1 h/g/f/e.txt
>>> df["filename"] = df["filename"].apply(os.path.basename)
>>> df
filename
0 d.txt
1 e.txt
您需要通过重新定义现有列来修改该列。先和熊猫一起读:
import pandas as pd
df = pd.read_csv('file_path\file_name.csv')
df['filename'] = df['filename'].map(lambda x: x.split('\\')[-1][:-4])
df = df.drop_duplicates()
这将生成预期结果作为数据帧,因此您所缺少的只是将其保存回csv/excel:
df.to_excel('file_path\new_file_name.xlsx')
或csv:
df.to_csv('file_path\new_file_name.csv')
使用将excel文件读入数据框
import pandas as pd
df = pd.read_excel("your excel file location")
然后使用apply函数对整个列执行一个操作,如下所示
def get_filename(path):
temp_str = path.split('/')
return temp_str[-1]
df["filename"] = df["filename"].apply(get_filename)
除上述答案外,您还可以使用字符串方法:
df['filename'] = df['filename'].str.split('/')[-1]
不确定哪一个最快。假设您在文件名列中有固定长度的目录,如下所示:
# created dataframe for example
df = pd.DataFrame({'Email':['test@gmail.com','test@gmail.com','test@gmail.com'],
'filename':['c:/users\test.csv','c:/users\test1.csv','c:/users\test1.csv']} ) # dataframe
# will create new column with file name only
df['only_filename'] = [(path.encode('unicode_escape')[9:]).decode("utf-8") for path in df['filename']]
然后,一旦有了数据帧,就需要检查列名是什么。它可能被称为其他名称,我们只是从上面提供的列名称中删除。
# created dataframe for example
df = pd.DataFrame({'Email':['test@gmail.com','test@gmail.com','test@gmail.com'],
'filename':['c:/users\test.csv','c:/users\test1.csv','c:/users\test1.csv']} ) # dataframe
# will create new column with file name only
df['only_filename'] = [(path.encode('unicode_escape')[9:]).decode("utf-8") for path in df['filename']]