我在一个文件夹中有多个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
如图所示的预期帧。
请注意左列的索引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']
答案 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)
让我知道这是否有帮助?