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

时间:2019-09-19 13:13:00

标签: python pandas append

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

问题是我们如何才能使用pandas连接文件夹中的所有文件,但是同时使用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']

3 个答案:

答案 0 :(得分: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 :(得分: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)

答案 2 :(得分: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)

让我知道这是否有帮助?