以最有效的方式将字典嵌套到Dataframe



我有一个像这样的嵌套字典:

my_dict[user_profile][user_id][level] = [[9999, 'Heavy Purchaser', 340, 'Star_chest', 999, 1000],
[9999, 'Heavy Purchaser', 340, 'Star_chest', 998, 5],
[9999, 'Heavy Purchaser', 340, 'Star_chest', 3, 1],
[9999, 'Heavy Purchaser', 340, 'Star_chest', 4, 1]]

基本上,每个user_profile, user_id我收集每个级别收到的奖励。dict[user_profile][user_id][level]中包含的列表数量是可变的,不是固定的。

奖励是这样的:[9999, 'Heavy Purchaser', 340, 'Star_chest', 999, 1000]

我想创建一个DF的奖励使用最有效和最快的解决方案。最后这就是我想要的:

ID      user_profile     user_id  Chest_type  item_code  amount
9999  'Heavy Purchaser'  340       'Star_chest'  999      1000
9999  'Heavy Purchaser'  340       'Star_chest'  4        1
9999  'Heavy Purchaser'  340       'Star_chest'  3        1

我试图使用df.loc[df.shape[0]] = list_with_rewards附加每个单独的列表,但它需要太多的时间。有什么建议吗?

您开始使用的数据是不是一个嵌套字典,它只是一个嵌套列表。您可能需要考虑转换到嵌套字典,因为它似乎对您正在收集的数据类型更有意义……但这是另一个问题。:)

pandas中,通常您想要做的最后一件事是逐行添加到数据帧中,或者通常逐行添加任何东西。如果您仔细查看数据框架的文档,根据数据结构或文件类型和数据方向,有几种方法可以从数据创建。你的数据是一个"列表的列表"。每个列表都可以解释为一个"记录"。或者数据帧或数据库中的一行。因此,您可以使用from_records()结构。见:

In [7]: import pandas as pd
In [8]: data = [[9999, 'Heavy Purchaser', 340, 'Star_chest', 999, 1000],
...:    [9999, 'Heavy Purchaser', 340, 'Star_chest', 998, 5],
...:    [9999, 'Heavy Purchaser', 340, 'Star_chest', 3, 1],
...:    [9999, 'Heavy Purchaser', 340, 'Star_chest', 4, 1]]
In [9]: type(data)
Out[9]: list
In [10]: pd.DataFrame.from_records(data, columns=['ID', 'user', 'user_id', 'chest', 'count', 'amount'])
Out[10]: 
ID             user  user_id       chest  count  amount
0  9999  Heavy Purchaser      340  Star_chest    999    1000
1  9999  Heavy Purchaser      340  Star_chest    998       5
2  9999  Heavy Purchaser      340  Star_chest      3       1
3  9999  Heavy Purchaser      340  Star_chest      4       1

最新更新