python - 将字典的字典转换为 Pandas 中的数据框

标签 python python-3.x pandas dictionary dataframe

我有一个像这样的 dict:

data = {'1':{'a':10, 'b':30}, '2':{'a':20, 'b':60}}

我想将其转换成这样的数据框:

x   y   z
1   a   10
1   b   30
2   a   20
2   b   60

有人知道吗?

最佳答案

使用字典理解 concat :

df = pd.concat({k: pd.Series(v) for k, v in data.items()}).reset_index()
df.columns = list('xyz')

print (df)
   x  y   z
0  1  a  10
1  1  b  30
2  2  a  20
3  2  b  60

为了获得更好的性能,请将 list compehensionsorting 结合使用:

L = sorted([(k,k1,v1) for k,v in data.items() for k1,v1 in v.items()], 
            key=lambda x: (x[0], x[1]))
print (L)
[('1', 'a', 10), ('1', 'b', 30), ('2', 'a', 20), ('2', 'b', 60)]

df = pd.DataFrame(L, columns=list('xyz'))
print (df)
   x  y   z
0  1  a  10
1  1  b  30
2  2  a  20
3  2  b  60

时间:

In [34]: %timeit jez1(data)
16.8 ms ± 403 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [35]: %timeit jez(data)
1.96 s ± 90.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [37]: %timeit jp(data)
43 ms ± 353 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

与@jp 相同的代码:

data = {str(k): {'a': 10, 'b': 30} for k in range(10000)}

def jp(data):
    return pd.melt(pd.DataFrame.from_dict(data, orient='index').reset_index().rename(columns={'index': 'x'}),
                   id_vars=['x'], value_vars=['a', 'b'], var_name='y', value_name='z')\
             .sort_values(['x', 'y']).reset_index(drop=True)

def jez(data):
    df = pd.concat({k: pd.Series(v) for k, v in data.items()}).reset_index()
    df.columns = list('xyz')
    return df

def jez1(data):
    L = sorted([(k,k1,v1) for k,v in data.items() for k1,v1 in v.items()], key=lambda x: (x[0], x[1]))
    df = pd.DataFrame(L, columns=list('xyz'))
    return df

assert (jez1(data).values == jez(data).values).all()

关于python - 将字典的字典转换为 Pandas 中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49817811/

相关文章:

python - 当特定单词是列内列表中的值时,如何将其添加到新列

python - shebang env首选python版本

python - 在 Tensorflow 2 中为类 Model(object) 创建检查点

python - 为什么 select_dtypes 在这种情况下在 pandas 中不起作用

python - 如何计算 Str 中的重复字符

python - python中 float 范围的函数

python - 访问嵌套字典 panda 中的单元格的最佳方式是什么?

python - 如何使用python删除json对象?

python - 当我尝试使用 pandas 对 csv 文件求和时,它不起作用

python - 我的函数返回一个函数,但它显示错误,没有输出?