Py学习  »  Python

如何构造此数据集以进行分析和可视化?(有些列包含列表而不是单个值——Python和Pandas)

Robert Buttery • 3 年前 • 1318 次点击  

问题:我该如何改进我的方法(“expand_traits”张贴在下面)或我试图使用的数据结构?我估计我的解决方案的运行时间是几个小时,这似乎是我在某个地方犯了很大的错误(考虑到收集所有数据需要大约10分钟,并且可能需要几个小时才能将其转换为我可以分析的内容)。

我收集了一些基本上是熊猫数据框的数据,其中表中的一些列是列表列表(技术上格式化为字符串,所以当我评估它们时,我使用 阿斯特。文字评估(列) -如果相关的话)。

要稍微解释一下上下文:

数据包含传奇联盟TFT游戏模式的历史数据。我的目标是对它进行一些分析,根据列表中的每个项目进行分组,看看它们的平均表现如何。我真的只能从表格的角度来考虑,比如df。groupby(by='Trait')。mean()获得每个特质的平均获胜率,但我愿意接受其他想法。

以下是数据集的一个示例:

等级 召唤者 特点 单位
1. 名字1 ['7名创新者','1名变形金刚','3名魔术师','2名社交名流','2名发条机','2名学者','2名废品'] ['Ezreal'、'signed'、'Zilean'、'Taric'、'Heimerdinger'、'Janna'、'Orianna'、'Seraphine'、'Jayce']
2. 名字2 ['1个可爱的','1个贪吃的','5个唯利是图的','4个布鲁瑟','6个化学技术','2个学者','1个社交名媛','2个双胞胎'] ['Illaoi'、'Gangplank'、'MissFortune'、'Lissandra'、'Zac'、'Urgot'、'DrMundo'、'TahmKench'、'Yuumi'、'Viktor']

表中的总记录约为40000条(听起来不算太多),但我最初的想法是基本上将嵌套列表“unpivot”到它们自己的记录中。

我的想法有点像:

召唤者 特质 记录ID
名字1 7创新者 身份证1
名字1 1变压器 身份证1
... ... ...
名字2 1.可爱的 身份证2
名字2 1贪吃鬼 身份证2

由于每个列表中的项目数,此转换将把我的~40000条记录转换为几十万条。

def expand_traits(traits_df):
    traits_df_expanded = pd.DataFrame()
    for i in range(len(traits_df)):
        traits = ast.literal_eval(traits_df.Traits[i])
        for trait in traits:   
            record = {
                'Summoner': traits_df.Summoner[i],
                'Trait': trait,
                'match_id': str(traits_df.match_id[i])
                }
            traits_df_expanded = traits_df_expanded.append(record, ignore_index=True)

这种方法合乎逻辑吗?还是我错过了什么。

我无法想象这是最佳的方法——我的expand_traits方法也可能出了问题。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129442
 
1318 次点击  
文章 [ 1 ]  |  最新文章 3 年前