字典到数据帧熊猫:错误:传递了 6 列,传递的数据有 2 列. - 在蟒蛇中循环



我想将python字典转换为pandas DataFrame,但由于字典值的长度不同,当我这样做时:

recomm = pd.DataFrame(recommendation.items(),columns=['id','recId1','recId2','recId3','recId4','recId5'])

我得到:

传递

6 列,传递的数据有 2 列

这意味着提供的值之一的长度为 2。

为了纠正它,我做了:

for key in recommendation.keys():
    while True:
        l1 = recommendation[key]
        l1.append(0)
        recommendation[key] = l1
        if len(l1) < 5:
            break

但是转换为DF时仍然遇到错误。

我按如下方式检查了字典:

 for key in recommendation.keys():
    if len(recommendation[key]) != 5:
        print key

并发现长度为 5 的那些也添加了 0。 意味着我现在有一些长度为 6 的值。 例如字典值:

[12899423, 12907790, 12443129, 12558006, 12880407, 0]

如何更正 while 代码,以便在列表长度<5> 时,它将 0 添加到值列表中。

有没有更好的方法将字典转换为熊猫数据帧? 字典键是:int 和 str。

您可以使用以下内容:

在python

2.7中使用iteritems((,因为它在字典上返回迭代器,在python 3.x中,items((具有相同的行为

import numpy as np
import pandas as pd
#Your dictionary
d = dict( A = np.array([1,2]), B = np.array([1,2,3,4]) )
df = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in d.iteritems() ]))

它将用缺少条目的 NaN 值填充数据帧,然后您只需调用 fillna 函数:

df.fillna(0,inplace=True)

您丢失的数据现在将用零填充

最新更新