如何将 defaultdict(list) 转换为 Pandas DataFrame
How to convert a defaultdict(list) to Pandas DataFrame
我有一个具有这种结构的 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'])
但是,我的 'category' 专栏遇到了问题。这是列表列表的一列。我正在尝试将 'category' 中的 2 个值拆分为 2 个单独的列。所以我最终的 DataFrame 列将是 ['id'、'score'、'category'].
当我尝试使用以下应用函数时:
db['category'].apply(lambda x: x[0][0])
我收到 'list index out of range' 的错误。
我的代码可能有什么问题?我应如何从列表列表中创建 2 个新列?
谢谢。
我相信你需要:
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'])
使用列表理解
例如:
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
我有一个具有这种结构的 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'])
但是,我的 'category' 专栏遇到了问题。这是列表列表的一列。我正在尝试将 'category' 中的 2 个值拆分为 2 个单独的列。所以我最终的 DataFrame 列将是 ['id'、'score'、'category'].
当我尝试使用以下应用函数时:
db['category'].apply(lambda x: x[0][0])
我收到 'list index out of range' 的错误。
我的代码可能有什么问题?我应如何从列表列表中创建 2 个新列?
谢谢。
我相信你需要:
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'])
使用列表理解
例如:
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