将数据帧字典合并为 1 个单个数据帧

Posted

技术标签:

【中文标题】将数据帧字典合并为 1 个单个数据帧【英文标题】:Combine dictionary of dataframes into 1 single dataframe 【发布时间】:2018-02-27 01:56:30 【问题描述】:

我正在寻找一种解决方案,将我在字典中的所有数据帧放入 1 个单一的巨型数据帧中。我对 Python 比较陌生,所以我无法理解如何遍历字典并将所有数据帧放入 1。到目前为止我实现的代码如下:

import sys
from ftplib import FTP
import os
import socket
import time
import pandas as pd
import numpy as np
from glob import glob

path = 'path_to_file'

files = glob(path + '/*Mail*.xlsx')

print files

get_df = lambda f: pd.read_excel(f, sheetname=None)

dodf = f: get_df(f) for f in files  ### dictionary of dataframes

现在,我需要将所有不同的数据帧放入 1 个数据帧中,然后对其进行操作。任何建议将不胜感激。

我试过了,

for df in dodf:
pd.concat(dodf.values(), ignore_index=True)

但它似乎无法正常工作。

【问题讨论】:

【参考方案1】:

我认为需要 concat 与 dict 理解:

dodf = f: pd.read_excel(f, sheet_name=None) for f in files
df = pd.concat([v for k,v in dodf.items()])

或者:

dodf = f: pd.read_excel(f, sheet_name=None) for f in files
df = pd.concat([pd.concat(v) for k,v in dodf.items()])

【讨论】:

已经试过了,但一直报错:“无法连接非 NDFrame 对象” 很高兴能帮上忙 ;) 美好的一天! sheetname 现在是 sheet_name 根据文档:pandas.pydata.org/pandas-docs/stable/reference/api/… 我在我自己的 DataFrames 字典上试过这个并得到这个错误:TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame" @MyCarta - 有sheet_name=None 吗?它用于获取 DataFrames 的 orderdict 中的所有 sheetnames。【参考方案2】:
df_list = [ v for k,v in dodf.items()] 
df = pd.concat(df_list ,axis=1)

这行得通吗? 它还取决于 concat 是按列还是按行...

【讨论】:

以上是关于将数据帧字典合并为 1 个单个数据帧的主要内容,如果未能解决你的问题,请参考以下文章

在python中循环遍历数据框字典并将字典中的每个数据框与单个数据框合并

将列字典从不同的数据帧转换为数据帧:pyspark

将 1300 个数据帧合并为一个帧变得非常慢

迭代多个数据帧的合并

如何将2个时间序列数据(宽表)合并为1个数据帧(宽表)?

如何在Python中合并字典中的所有数据框[重复]