我有一个包含1000多个csv文件的目录,我想读取该目录并将其存储在数据框中,然后将其保存到文件中。我希望数据框尺寸为[文件,文件中的行,行的内容]。到目前为止,这是我想出的:
import pandas as pd
import glob
csv_files = glob.glob("data/*sample.csv")
df = (pd.read_csv(f) for f in csv_files)
dataset = pd.concat(df, ignore_index=True)
这给了我一个形状为[线,线的内容]的数据框,但是我再也看不到该线来自哪个文件。有人可以帮我吗?
答案 0 :(得分:0)
您可以创建所有文件名的列表,并在列表中带有扩展名,然后将其传递到concat
中的参数keys
,这样就创建了MultiIndex
。最后删除第二级并将其转换为索引:
from os.path import splitext, basename
csv_files = glob.glob("data/*sample.csv")
names = (splitext(basename(x))[0] for x in csv_files)
dfs = (pd.read_csv(f) for f in csv_files)
df = (pd.concat(dfs, keys=names)
.reset_index(level=1, drop=True)
.rename_axis('New')
.reset_index())
答案 1 :(得分:0)
与jezrael的解决方案相比,它花费了很多时间,但这是我使用了很长时间了。不过,现在应该使它更简洁了。
os.chdir('C:/')
file_list = []
for file in os.listdir():
df = pd.read_csv(file)
df['Filename'] = file
file_list.append(df)
df = pd.concat(file_list, ignore_index=True)