【发布时间】: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中的每个目录都具有相同的结构,则可能会导致所描述的行为。
标签: python pandas csv for-loop glob