我将文件名添加到数据框中,但它只添加了相同的名称

Posted

技术标签:

【中文标题】我将文件名添加到数据框中,但它只添加了相同的名称【英文标题】:I add file names into dataframe but it adds only the same name 【发布时间】:2021-06-10 13:22:49 【问题描述】:

我有很多 csv 文件要打开,我需要添加一个额外的列,其中包含这些文件的名称。例如,我有 x.csv、y.csv、z.csv 等。在 csv 文件中,它如下所示:

X  Z
1 3
4 5
4 6

它应该看起来像这样

    X  Z name
    1 3  x
    4 5  x
    4 6  x
    4 5  y
    4 5  y
    1 2  y 

我的代码在下面,但它只返回 1 个值...

import pandas as pd
import os
import rglob

file_list = rglob.rglob("path", "*")
    
li = []
    
for path in file_list:
    df = pd.read_csv(path, index_col=None, header=0,)
    file_name = os.listdir('path')[0]
    df["file_name"] = file_name
    li.append(df)

知道如何解决吗?

最好的问候

【问题讨论】:

我更新代码。不需要“glob”。但是效果还是一样的 file_name = os.listdir('path')[0] 应该是 file_name = os.listdir(path)[0]。如果path 是一个固定字符串,那么您每次都会得到相同的结果 但看起来不是这样:file_name = os.listdir(C:\Users\tomasz.miskiewicz\Desktop\file)[0] 这个文件里面是 csv 文件 @Tmiskiewicz os.listdir(...)[0] 返回第一个遇到的文件或目录。它不返回文件名。因此,如果file_list 中的每个目录都具有相同的结构,则可能会导致所描述的行为。 【参考方案1】:

您的os.listdir 错误。 os.listdir 返回目录中的文件列表。您应该使用os.basenamepathlib.Path.name

使用路径库:

import pandas as pd
from pathlib import Path

file_list = Path("path").rglob("*.csv")
    
li = []
    
for path in file_list:
    df = pd.read_csv(path, index_col=None, header=0,)
    df["file_name"] = path.name
    li.append(df)

【讨论】:

以上是关于我将文件名添加到数据框中,但它只添加了相同的名称的主要内容,如果未能解决你的问题,请参考以下文章

如何将全局样式添加到 Angular 6/7 库

如何为具有相同名称的多个文本区域添加ckeditor

如何将图像添加到 iOS 模拟器

如何将原始数据框中的列添加到报废数据?

如何将表单控件添加到角度 8 中的文本区域

jQuery - 如何将验证相同的输入名称添加到规则方法中? [复制]