[英]Pandas DataFrame concatenate along new axis
我有一个包含 1000+ csv 文件的目录,我想读取这些文件并将其存储在 dataframe 中,然后将其保存到文件中。 我希望 dataframe 尺寸为 [文件,文件中的行,行的内容]。 到目前为止,这是我想出的:
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)
这给了我一个 dataframe 形状 [line, content of line] 但我无法再看到该行来自哪个文件。 有人可以在这里帮助我吗?
您可以在 list 中创建具有我们扩展名的所有文件名的列表,然后将其传递给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())
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.