相关疑难解决方法(0)

从嵌套字典中的项构造pandas DataFrame

假设我有一个带结构的嵌套字典'user_dict':

第1级: UserId(长整数)

第2级:类别(字符串)

第3级:各种属性(浮点数,整数等)

例如,这个字典的条目是:

user_dict[12] = {
    "Category 1": {"att_1": 1, 
                   "att_2": "whatever"},
    "Category 2": {"att_1": 23, 
                   "att_2": "another"}}
Run Code Online (Sandbox Code Playgroud)

"user_dict"中的每个项目具有相同的结构,"user_dict"包含大量项目,我想将这些项目提供给pandas DataFrame,从属性构建系列.在这种情况下,分层索引对于此目的是有用的.

具体来说,我的问题是,是否存在一种方法来帮助DataFrame构造函数理解该系列应该是从字典中"级别3"的值构建的?

如果我尝试类似的东西:

df = pandas.DataFrame(users_summary)
Run Code Online (Sandbox Code Playgroud)

"级别1"(用户ID)中的项目被视为列,这与我想要实现的目标相反(将用户ID作为索引).

我知道我可以在迭代字典条目后构建系列,但如果有更直接的方法,这将非常有用.类似的问题是询问是否可以从文件中列出的json对象构造pandas DataFrame.

python dataframe pandas

65
推荐指数
7
解决办法
7万
查看次数

嵌套字典到多索引数据框,其中字典键是列标签

假设我有一个如下所示的字典:

dictionary = {'A' : {'a': [1,2,3,4,5],
                     'b': [6,7,8,9,1]},

              'B' : {'a': [2,3,4,5,6],
                     'b': [7,8,9,1,2]}}
Run Code Online (Sandbox Code Playgroud)

我想要一个看起来像这样的数据帧:

     A   B
     a b a b
  0  1 6 2 7
  1  2 7 3 8
  2  3 8 4 9
  3  4 9 5 1
  4  5 1 6 2
Run Code Online (Sandbox Code Playgroud)

有没有方便的方法来做到这一点?如果我尝试:

In [99]:

DataFrame(dictionary)

Out[99]:
     A               B
a   [1, 2, 3, 4, 5] [2, 3, 4, 5, 6]
b   [6, 7, 8, 9, 1] [7, 8, 9, 1, 2]
Run Code Online (Sandbox Code Playgroud)

我得到一个数据框,其中每个元素都是一个列表.我需要的是一个多索引,其中每个级别对应于嵌套字典中的键和对应于列表中每个元素的行,如上所示.我想我可以做一个非常粗糙的解决方案,但我希望可能会有一些更简单的东西.

python dictionary multi-index dataframe pandas

36
推荐指数
3
解决办法
2万
查看次数

来自嵌套字典的 Pandas 数据框

我的字典是这样的:

{'x': {'b': 10, 'c': 20}, 'y': {'b': '33', 'c': 44}}
Run Code Online (Sandbox Code Playgroud)

我想得到一个如下所示的数据框:

index   col1    col2    val
0        x       b      10
1        x       c      20
2        y       b      33
3        y       c      44
Run Code Online (Sandbox Code Playgroud)

我尝试调用 pandas.from_dict(),但它没有给我想要的结果。那么,实现这一目标的最优雅、最实用的方法是什么?

编辑:实际上,我的字典的深度为 4,所以我希望看到针对这种情况的解决方案,或者理想情况下,可以在一般设置中针对任意深度工作的解决方案。

这是一个更深层次的字典的例子: {'x':{'a':{'m':1, 'n':2}, 'b':{'m':10, 'n':20}}, 'y':{'a':{'m':100, 'n':200}, 'b':{'m':111, 'n':222}} }合适的数据框应该有 8 行。

回答:

df = pd.DataFrame([(k1, k2, k3, k4, k5, v) for k1, k2345v in dict.items()
                           for k2, k345v in k2345v.items()
                           for k3, k45v in k345v.items()
                           for k4, k5v in k45v.items()
                           for k5, …
Run Code Online (Sandbox Code Playgroud)

python dictionary dataframe pandas

7
推荐指数
2
解决办法
7618
查看次数

标签 统计

dataframe ×3

pandas ×3

python ×3

dictionary ×2

multi-index ×1