如何添加多个CSV文件并创建MultiIndex数据框

问题描述 投票:1回答:3

我在一个文件夹中有多个csv文件。目的是将csv文件附加到单个pd框架中。

问题是我们如何使用熊猫连接文件夹中的所有文件,但同时使用keys参数keys将特定键与切碎的DataFrame的每个片段相关联。

这意味着我们现在可以通过键选择每个块:

例如,给定一个文件夹中的两个csv文件,每个csv都有3列(A,B,C)和两行。

CSV文件:Book1

A0 B0 C0

A1 B1 C1

CSV文件:Book2

A2 B2 C2

A3 B3 C3

如图所示的预期帧。

enter image description here

请注意左列的索引Book1和Book2。该名称来自所述的csv文件。

到目前为止,我有以下代码

# match the pattern ‘csv’ in the folder
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

但是在下面的代码行中我需要更改以实现上述目标?

combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])

之所以添加此密钥,是为了将来方便访问。通常可以从

实现
.loc['Book1']
python pandas append
3个回答
1
投票

您可以使用assign方法向每个数据框添加一个额外的列;可以在读取它们之后并在连接之前完成

combined_csv = pd.concat([pd.read_csv(f).assign(name=f) for f in all_filenames ])

这将添加name列,其所有值均等于文件名f

当连接所有数据集时,可以设置MultiIndex

combined_csv.reset_index(drop=True, inplace=True)

combined_csv.set_index([combined_csv.name, combined_csv.index], inplace=True)

1
投票

查找下面的代码:

import pandas as pd
dfs=[]
for f in all_filenames:
    df=pd.read_csv(f)
    df['index_name']=f.split('.')[0]
    dfs.append(df)
df_combined = pd.concat(dfs)
df_combined.set_index('index_name', inplace=True)

0
投票

您可以为每个文件创建一个数据框,然后添加它来自哪本书,然后将其附加到Combined_csv数据框。

books = ['book1' 'book2',...'bookn']

i = 1

combined_csv = pd.DataFrame(columns=['Book', 'A', 'B', 'C'])

for book in books:
    data = pd.DataFrame('book{}.csv'.format(i))
    data.insert(0, 'Book', 'Book'.format(i))
    combined_csv = combined_csv.append(data, ignore_index=True)
    i += 1

combined_csv.set_index('Book', inplace=True)

让我知道这是否有帮助?

© www.soinside.com 2019 - 2024. All rights reserved.