Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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 将文件名附加到pandas中的csv文件_Python_Python 3.x - Fatal编程技术网

Python 将文件名附加到pandas中的csv文件

Python 将文件名附加到pandas中的csv文件,python,python-3.x,Python,Python 3.x,我正在尝试将我的CSV文件的文件名作为列名附加到这些CSV文件中,我有基本的想法和代码,只是无法将其集成到我当前的代码中。这可能很容易 这就是我读取CSV文件并将其附加到数据框中的方式 big_frame = pd.concat([pd.read_csv(f, skiprows=0 , header=None , index_col= False ,names=col_Names) for f in glob.glob('filepath' + "/*.csv")],

我正在尝试将我的CSV文件的文件名作为列名附加到这些CSV文件中,我有基本的想法和代码,只是无法将其集成到我当前的代码中。这可能很容易

这就是我读取CSV文件并将其附加到数据框中的方式

big_frame = pd.concat([pd.read_csv(f, skiprows=0 , header=None , index_col= False ,names=col_Names) for f in glob.glob('filepath' + "/*.csv")],
                      ignore_index=True)
我知道我只需要在代码的某个地方添加这两行

frame['filename'] = os.path.basename(f)
f.append(frame)
有什么帮助吗

例如,我有3个CSV文件,每个文件的列名如下所示

Column A Column B Column C 
我想将它们连接在一个大数据框架中,并添加一个新列,该列具有原始CSV文件名,如

Column A Column B Column C filename
                            file 1
                            file 2
                            file 3
您可以使用,也可以使用从模块打开文件

使用after
read\u csv
在读取列后立即添加列:

big_frame = pd.concat([pd.read_csv(f, ...).assign(filename=os.path.basename(f))
                       for f in glob.glob('filepath' + "/*.csv")],
                      ignore_index=True)
引用所有其他参数以
读取\u csv

其他变化:

  • pd.concat()。它只是使用了比所需更多的内存,而且由于您正在从磁盘读取数据,因此没有提供任何性能改进。当您使用生成器表达式时,它将需要额外的括号。请注意额外的缩进以确保可读性:

    big_frame = pd.concat((pd.read_csv(f, ...).assign(filename=os.path.basename(f))
                               for f in glob.glob('filepath' + "/*.csv")),
                           ignore_index=True)
    
  • 对于globbing,请使用os.path.join(因为
    filepath
    是一个变量名,而不是实际路径:

    glob.glob(os.path.join(filepath, '*.csv'))
    
    或者使用
    pathlib.Path
    Path.glob
    作为死神的答案

  • 使用所有参数:

    big_frame = pd.concat((pd.read_csv(f,
                                       skiprows=0,
                                       header=None,
                                       index_col=False,
                                       names=col_Names,
                            ).assign(filename=os.path.basename(f))
                                for f in glob.glob(os.path.join(filepath, '*.csv'))
                           ),
                           ignore_index=True)
    


    顺便说一句,我在大量阅读CSV时会这样做,除了我不使用basename,因为我希望包含文件的完整路径。从不同来源/目录读取相同格式的CSV时特别有用。

    您能发布预期的output@deadshot顺便说一句,@deadshot的回答也很好。我花了更长的时间来打字e和张贴额外的东西。请随意。
    big_frame = pd.concat((pd.read_csv(f,
                                       skiprows=0,
                                       header=None,
                                       index_col=False,
                                       names=col_Names,
                            ).assign(filename=os.path.basename(f))
                                for f in glob.glob(os.path.join(filepath, '*.csv'))
                           ),
                           ignore_index=True)