Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python和dataframe从excel中的路径获取基本文件名_Python_Pandas_Dataframe_Data Science - Fatal编程技术网

如何使用python和dataframe从excel中的路径获取基本文件名

如何使用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

我有一个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.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']]