我将文件名添加到数据框中,但它只添加了相同的名称
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.basename
或pathlib.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)
【讨论】:
以上是关于我将文件名添加到数据框中,但它只添加了相同的名称的主要内容,如果未能解决你的问题,请参考以下文章