通过dict进行交互,获取它们的值并转换为Pandasdf

8oomwypt  于 2023-03-11  发布在  其他
关注(0)|答案(3)|浏览(149)

我有一张字典

[{a:'jeffrey',b:'pineapple',c:'apple'},{a:'epstein',c:'banana'},{a:'didnt kill'},{a:'himself',b:'jebus'}]

我想做的是把这些值转换成一个Pandasdf,但是你可以看到一些dict缺少一些键,因此缺少值,所以我看了一下defaultdict对象,这样我就可以把list对象转换成Pandas实际上能够解释的东西,然后把它转换成一个 Dataframe 。

dd = defaultdict(list)

for d in l:
    for k in d.keys():
        dd[k]

for d in l:
    for k in dd.keys():
        try: 
            dd[k].append(d[k])
        except KeyError:
            dd[k].append(0)
# Dict auto adaptavél

代码工作,并遵循这些事件的顺序,意味着键为空返回0。但我想知道是否有更好的替代方案或具有更好的o(n)复杂度的代码
预期结果:

defaultdict(<class 'list'>, {'a': ['jeffrey', 'epstein', 'didnt kill', 'himself'], 'b': ['pineapple', 0, 0, 'jebus'], 'c': ['apple', 'banana', 0, 0]})
dtcbnfnu

dtcbnfnu1#

您可以使用DataFrame构造函数并使用0填充缺失值,然后使用to_dict方法将 Dataframe 导出为列表的dict:

>>> pd.DataFrame(l).fillna(0).to_dict('list')
{'a': ['jeffrey', 'epstein', 'didnt kill', 'himself'],
 'b': ['pineapple', 0, 0, 'jebus'],
 'c': ['apple', 'banana', 0, 0]}

中间结果:

>>> pd.DataFrame(l)
            a          b       c
0     jeffrey  pineapple   apple
1     epstein        NaN  banana
2  didnt kill        NaN     NaN
3     himself      jebus     NaN
wn9m85ua

wn9m85ua2#

为什么要使用defaultdict?只需使用dict中的get方法和默认值:

d_list = [{a:'jeffrey',b:'pineapple',c:'apple'},{a:'epstein',c:'banana'},{a:'didnt kill'},{a:'himself',b:'jebus'}]

dd = dict()

for key in [a, b, c]:
    dd[key] = [d.get(key, 0) for d in d_list]

print(dd)

输出:

{a: ['jeffrey', 'epstein', 'didnt kill', 'himself'], b: ['pineapple', 0, 0, 'jebus'], c: ['apple', 'banana', 0, 0]}

您也可以为[a, b, c]使用其他方法,但是我不能保证知道您所提供的列表中的所有键(不是以一种很好的简短方式)。

7vux5j2d

7vux5j2d3#

我不确定我是否完全理解您的问题,但是给定一个list_of_dictionaries,您可以使用pd.Dataframe()方法将其转换为pandas dataframe

df = pd.DataFrame(list_of_dicts)

然后,您可以使用.fillna()方法,在缺少键的位置用0值填充 Dataframe :

df.fillna(0, inplace=True)

虽然@B Remmelzwaal的答案也是正确的,但是通过列表和字典迭代列表并不是一个好的做法,尤其是在处理大量数据的时候。

相关问题