微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我需要将列表转换为熊猫数据框的帮助

如何解决我需要将列表转换为熊猫数据框的帮助

我正在尝试从Riot Game的API中提取数据并填充用于机器学习的数据框,但是我很难将数据提取格式转换为我的数据框。数据框中的每一行代表一个玩家玩的游戏。使用以下示例字典语法从API中提取特定的“单位”数据:

{'name': 'DarkStar','num_units': 6,'style': 3,'tier_current': 3,'tier_total': 4}
{'name': 'Infiltrator','num_units': 1,'style': 0,'tier_current': 0,'tier_total': 3}
{'name': 'Protector','num_units': 2,'style': 1,'tier_current': 1,'tier_total': 3}

我希望每个游戏都有14个左右的列,每个“名称”都有一个列,值=“ num_units”。我从字典中仅提取了需要的数据,以方便访问:

[('Chrono',2),('Cybernetic',('DarkStar',1)]

我的问题是:我该如何编程,以便每一列都有其对应的'num_units'填充(包括零,其中在游戏过程中未使用任何特征类型)?例如,假设三种特质类型是游戏中唯一使用的特质,“计时”,“ Cyber​​netic”和“暗星”将分别具有其对应的num_units,其余9个特质将具有“ 0”。我的代码在下面,感谢您的帮助,因为我仍然很陌生。

placements = []
total_damage_dealt = []
trait_names = []
unit_values = []
rounds_lasted = []
game_length = []
game_ids = []

for game in game_request:
    game_ids.append(game)
    total_game_data = requests.get("https://americas.api.riotgames.com/tft/match/v1/matches/"+game+"?api_key=hidden")
    total_game_data = total_game_data.json()
    all_player_game_data = total_game_data['info']
    length = all_player_game_data['game_length']
    game_length.append(length)
    participants = all_player_game_data['participants']
    for participant in participants: #checks to see if user in list = target user
        if participant['puuid'] == puuid:
            unit_names = []
            unit_qtys = []
            placements.append(participant['placement'])
            rounds_lasted.append(participant['last_round'])
            total_damage_dealt.append(participant['total_damage_to_players'])
            traits = participant['traits']
            for i in range(len(traits)):
                unit = traits[i]
                unit_names.append(unit.get('name'))
                unit_qtys.append(unit.get('num_units'))
            trait_total = list(zip(unit_names,unit_qtys))
        else:
            pass

编辑 以下是game_request和total_game_data的示例。我正在尝试获取total_game_data中的值。

游戏:

['NA1_3568227867']

全部游戏数据:

 {'Metadata': {'data_version': '4','match_id': 'NA1_3568227867','participants': ['6QdjrJ8Z2luRZ9anj_NaKaSJaHujCbQiCxM4Y8EOzU-0xWjS0ffhkBy4loBnTUu12c2J8V8edn_-AQ','o8ONYFnjauBocvolDOXiquZ0zI90XjbWRJbA5Ts9nVtQvea9iptxTswB7seKAco_u5pHYnlmmCvx-g','aoD-yE0c5DNFvqU51clI1NdcXe5_ioi89BRjJw_TMG0bcEaEUGZbyQygal7pEk-_MxnbaoQ6e8fD-A','RjbYAkqkK92DkFYzBQdYipzR2Uic10Qrhu14eG9OqZW69ggqt-Q1RtaEmaXsQ04vcwxDpDBJHuzg9A','cG9lhyIaoZVZRl7AYEJzQ97G9wJ2Bm-PQRQB-_dfTX517RxlKij6ReyK5bioz-X2G2iCyd7gXzz0Pw','TZ19msUDNNwVr546B1PVy2yk_L1inWFkxydk0D4LHuer1aIlkQ6kGVg5sM_KVpVrDTF_v7TLVImxeQ','TinjbjLvUe8SrzQuY8IWvK2mbGTia6KJQ1ZEylh12qnjsaT219Wlmf6KR5Y7RoTGN2DIbkvhCNLW5g','YMVx6f0CLfETeWRm7QwlXOkuroLZkaWKLZBMJLEL_TiFFInhsdTJtuZ9XUtPgIWRcDy23DHDW1O10Q']},'info': {'game_datetime': 1599630619849,'game_length': 2259.0498046875,'game_variation': 'TFT3_GameVariation_Finale','game_version': 'Version 10.18.333.8889 (Aug 31 2020/10:45:08) [PUBLIC] <Releases/10.18>','participants': [{'companion': {'content_ID': 'b93f1ae5-97b0-4194-bc0a-f212c7120543','skin_ID': 13,'species': 'PetSGPig'},'gold_left': 1,'last_round': 31,'level': 8,'placement': 4,'players_eliminated': 0,'puuid': '6QdjrJ8Z2luRZ9anj_NaKaSJaHujCbQiCxM4Y8EOzU-0xWjS0ffhkBy4loBnTUu12c2J8V8edn_-AQ','time_eliminated': 1785.7803955078125,'total_damage_to_players': 79,'traits': [{'name': 'Blaster','tier_total': 2},{'name': 'Chrono','tier_total': 
4},{'name': 'DarkStar','tier_total': 4},{'name': 'Demolitionist','tier_total': 1},{'name': 'ManaReaver',{'name': 'Paragon',{'name': 'Rebel','tier_total': 3},{'name': 'SpacePirate','num_units': 3,{'name': 'StarGuardian',{'name': 'Vanguard','num_units': 4,'style': 2,'tier_current': 2,'tier_total': 3}],'units': [{'character_id': 'TFT3_Ziggs','items': [],'name': '','rarity': 0,'tier': 3},{'character_id': 'TFT3_Graves','items': [26,57],{'character_id': 'TFT3_Poppy','tier': 2},{'character_id': 'TFT3_Darius','items': [33,39,15],'rarity': 1,{'character_id': 'TFT3_Mordekaiser','items': [99,37,36],{'character_id': 'TFT3_Jayce','items': [67],'rarity': 2,{'character_id': 'TFT3_WuKong','items': [59],'rarity': 3,{'character_id': 'TFT3_Thresh','items': [44],'rarity': 4,{'character_id': 'TFT3_Janna','tier': 1}]},{'companion': 
{'content_ID': '9f756223-fe56-4ea1-9221-f5011bad94fe','skin_ID': 22,'species': 'PetGriffin'},'gold_left': 2,'last_round': 23,'level': 7,'placement': 7,'puuid': 'o8ONYFnjauBocvolDOXiquZ0zI90XjbWRJbA5Ts9nVtQvea9iptxTswB7seKAco_u5pHYnlmmCvx-g','time_eliminated': 1324.1546630859375,'total_damage_to_players': 29,'traits': [{'name': 'Astro',{'name': 'Set3_Brawler',{'name': 'Set3_Celestial',{'name': 'Set3_mystic',{'name': 'Sniper','units': [{'character_id': 
'TFT3_Malphite',{'character_id': 'TFT3_Caitlyn',{'character_id': 'TFT3_Nautilus','items': [88],'tier': 1},{'character_id': 'TFT3_Ashe','items': [14],{'character_id': 'TFT3_Karma',{'character_id': 'TFT3_Gnar',{'character_id': 'TFT3_Teemo','items': [37,4],{'companion': {'content_ID': '6dcdc951-4e4b-4a24-876a-02c964f72b70','species': 'PetFairy'},'placement': 5,'puuid': 'aoD-yE0c5DNFvqU51clI1NdcXe5_ioi89BRjJw_TMG0bcEaEUGZbyQygal7pEk-_MxnbaoQ6e8fD-A','total_damage_to_players': 
88,{'name': 'Protector','units': [{'character_id': 'TFT3_Darius',{'character_id': 'TFT3_Rakan',{'character_id': 'TFT3_XinZhao','items': [66,'items': [6],'items': [4],{'character_id': 'TFT3_Jhin','items': [29,19,5],'items': [88,77],{'companion': {'content_ID': 'e05960be-0add-4aa6-842d-1be017e7dd81','skin_ID': 16,'species': 'PetSGShisa'},'gold_left': 0,'last_round': 35,'placement': 3,'players_eliminated': 2,'puuid': 'RjbYAkqkK92DkFYzBQdYipzR2Uic10Qrhu14eG9OqZW69ggqt-Q1RtaEmaXsQ04vcwxDpDBJHuzg9A','time_eliminated': 2011.732666015625,'total_damage_to_players': 108,{'name': 'Battlecast',{'name': 'Infiltrator','num_units': 5,{'name': 'MechPilot',{'name': 'Set3_Sorcerer','tier_total': 2}],'units': [{'character_id': 'TFT3_Nocturne',{'character_id': 'TFT3_Annie',{'character_id': 'TFT3_Zed',{'character_id': 'TFT3_Shaco',4,14],{'character_id': 'TFT3_Rumble','items': [25,69,{'character_id': 'TFT3_Fizz',44,'items': [28,79,33],'tier': 2}]},{'companion': {'content_ID': '270079d1-2d24-41c2-b6a1-34613304e16c','skin_ID': 7,'species': 'PetGhosty'},'last_round': 40,'level': 9,'placement': 2,'puuid': 'cG9lhyIaoZVZRl7AYEJzQ97G9wJ2Bm-PQRQB-_dfTX517RxlKij6ReyK5bioz-X2G2iCyd7gXzz0Pw','time_eliminated': 2250.813232421875,'total_damage_to_players': 158,{'name': 'Mercenary',{'name': 'Set3_Blademaster',{'name': 'Starship','units': [{'character_id': 'TFT3_Graves',{'character_id': 'TFT3_Xayah','items': [22,12,24],'name': 
'','items': [36,13,34],'items': [55],{'character_id': 'TFT3_MasterYi',49],'items': [57,19],{'character_id': 'TFT3_Gangplank','items': [49],{'character_id': 'TFT3_AurelionSol','items': [24,23,{'companion': {'content_ID': '6054d70b-e401-4bec-b350-f26865700c77','species': 'PetPenguKnight'},'gold_left': 33,'last_round': 20,'level': 6,'placement': 8,'puuid': 'TZ19msUDNNwVr546B1PVy2yk_L1inWFkxydk0D4LHuer1aIlkQ6kGVg5sM_KVpVrDTF_v7TLVImxeQ','time_eliminated': 1139.9739990234375,'total_damage_to_players': 12,{'name': 'Cybernetic','units': [{'character_id': 'TFT3_Fiora',{'character_id': 'TFT3_Leona',{'character_id': 'TFT3_Lucian','items': [57],{'character_id': 'TFT3_Vi',56],{'character_id': 'TFT3_Vayne','items': [12,12],{'companion': {'content_ID': 'b5cab758-7194-412a-8370-908b11c90e0a','gold_left': 9,'placement': 1,'players_eliminated': 1,'puuid': 'TinjbjLvUe8SrzQuY8IWvK2mbGTia6KJQ1ZEylh12qnjsaT219Wlmf6KR5Y7RoTGN2DIbkvhCNLW5g','total_damage_to_players': 234,'traits': [{'name': 'DarkStar','units': [{'character_id': 'TFT3_JarvanIV','rarity': 
0,'items': [39,34,69],'items': [16,15,22],'items': [14,16],{'character_id': 'TFT3_Soraka','items': [34],{'character_id': 'TFT3_Xerath',{'companion': {'content_ID': '52ed5723-d887-4e7e-b08a-405ec77a7878','gold_left': 3,'last_round': 27,'placement': 6,'puuid': 'YMVx6f0CLfETeWRm7QwlXOkuroLZkaWKLZBMJLEL_TiFFInhsdTJtuZ9XUtPgIWRcDy23DHDW1O10Q','time_eliminated': 1559.3280029296875,'total_damage_to_players': 40,'items': [13,{'character_id': 'TFT3_Jinx','items': [11],'tier': 2}]}],'queue_id': 1100,'tft_set_number': 3}}

解决方法

如果您需要与以下输出类似的内容,请参见随附的代码:

enter image description here

import requests
import pandas as pd

matchId = "NA1_3568227867"

puuid = "zzAlAUx53ZNbKaNaNjj2oiGNyEfdzYxIShbXm3KG5674sI10j1mzgCFNDeXT8weVKpPxmL9tcyibAA"

response = requests.get(f"https://americas.api.riotgames.com/tft/match/v1/matches/{matchId}",headers = {"X-Riot-Token" : "API-KEY"})

data = response.json()

participants = data["info"]["participants"]

# Create a list for every column in your dataframe
name = []
num_units = []
style = []
tier_current = []
tier_total = []

for participant in participants:

    if (participant["puuid"] == puuid):

        traits = participant["traits"]

        for trait in traits:
            name.append(trait["name"])
            num_units.append(trait["num_units"])
            style.append(trait["style"])
            tier_current.append(trait["tier_current"])
            tier_total.append(trait["tier_total"])


dataframe = pd.DataFrame(data={'name' : name,'num_units' : num_units,'style' : style,'tier_current' : tier_current,'tier_total' : tier_total})

print(dataframe)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。