我有一个像这样的嵌套字典:
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