在 pandas 的列中添加文件名

zil*_*man 0 python csv dataframe pandas

我有一个 csv 文件 chr1.step1.csv,假设它有五列。我可以这样读:

df=pd.read_csv('chr1.step1.csv',sep='\t',header=None)
df.head()
0 1 2 3 4 5
a1 b1 c1 d1 e1
a2 b2 c2 d2 e2
a3 b3 c3 d3 e3
Run Code Online (Sandbox Code Playgroud)

如何添加第六列作为文件名chr1.step1.csv,例如:

0 1 2 3 4 5 6
a1 b1 c1 d1 e1 chr1.step1.csv
a2 b2 c2 d2 e2 chr1.step1.csv
a3 b3 c3 d3 e3 chr1.step1.csv
Run Code Online (Sandbox Code Playgroud)

它只有一个文件,而不是多个文件。

Gon*_*ica 5

假设第 6 列名称为Name File,并且考虑到该文件位于路径csv = '/home/User/Documents/file.csv'或 中csv = 'file.csv',则可以使用该os.path模块来完成此操作。

import os.path

df['Name File'] = os.path.basename(csv)
Run Code Online (Sandbox Code Playgroud)

正如@tdy 所建议的那样,人们也可以这样做。将文件名分配给变量

filename='chr1.step1.csv'; 
Run Code Online (Sandbox Code Playgroud)

然后,假设 df 已经存在(否则需要使用类似的内容来读取它df=pd.read_csv(filename,sep='\t',header=None)),将文件名分配给新列中的单元格

df['Name File'] = filename
Run Code Online (Sandbox Code Playgroud)

额外:如果有一个包含大量 csv 文件的目录

import pandas as pd
import glob
import os.path

# Create a list of all CSV files
files = glob.glob("*.csv")

# Create an empty list to append the df
filenames = []

for csv in files:
    df = pd.read_csv(csv)
    df['Name File'] = os.path.basename(csv)
    filenames.append(df)
Run Code Online (Sandbox Code Playgroud)