如何将defaultdict(列表)转换为Pandas DataFrame

问题描述 投票:0回答:3

我有一个具有以下结构的 defaultdict(list) 对象:

{id: [list[list]]}

例如,

'a1': [[0.01, 'cat']],

'a2': [[0.09, 'cat']],

'a3': [[0.5, 'dog']],

...

我想将这个

defaultdict(list)
转换为
Pandas DataFrame
对象。

我尝试了以下方法:

df = pd.DataFrame(list(my_dict.items()), columns=['id', 'category'])

但是,我的“类别”列遇到了问题。这是一列列表的列表。我试图将“类别”中的 2 个值拆分为 2 个单独的列。所以我的最终 DataFrame 列将是 ['id', 'score', 'category']。

当我尝试使用以下应用功能时:

db['category'].apply(lambda x: x[0][0])

我收到“列表索引超出范围”的错误。

我的代码可能有什么问题?我该如何从列表列表中创建 2 个新列?

谢谢你。

python pandas dataframe defaultdict
3个回答
5
投票

我相信你需要:

df = pd.DataFrame([[k] + v[0] for k, v in my_dict.items()], 
                   columns=['id', 'score', 'category'])

或者:

df = pd.DataFrame([(k, v[0][0], v[0][1]) for k, v in my_dict.items()], 
                   columns=['id', 'score', 'category'])

0
投票

使用列表理解

例如:

import pandas as pd
d = {'a1': [[0.01, 'cat']], 'a2': [[0.09, 'cat']],'a3': [[0.5, 'dog']]}


df = pd.DataFrame([[k] + j for k,v in d.items() for j in v], columns=['id', 'score', 'category'])
print(df)

输出:

   id  score category
0  a1   0.01      cat
1  a3   0.50      dog
2  a2   0.09      cat

0
投票

我也需要这样做。 我使用了pandas的爆炸功能。

from collections import defaultdict
import pandas as pd

# Create Default Dict
dd = defaultdict(list)
dd['a1'].append(0.01)
dd['a1'].append('cat')
dd['a2'].append(0.09)
dd['a2'].append('cat')
dd['a3'].append(0.5)
dd['a3'].append('dog')
dd['a3'].append('mouse')
dd['b'].append('barco')

# Transform in Dataframe
df = pd.DataFrame.from_dict(dd.items())
df.columns = ['key', 'values']
df = df.explode('values')
df

我相信这是一种更干净的方法......

© www.soinside.com 2019 - 2024. All rights reserved.