如何基于json文件的查找更改数据帧中的值

如何基于json文件的查找更改数据帧中的值,json,pandas,dataframe,Json,Pandas,Dataframe,我想练习建立模型,我想我会用我熟悉的东西来做:传奇联盟。我很难用json中的值替换数据帧中的整数 我使用的数据集来自kaggle。你可以抓住它自己跑 我有json文件的形式:(它实际上必须更大,但我缩短了它) 和表单的数据框架 打印df gameDuration t1_champ1id 0 1949 1 1 1851 2 2 1493 1

我想练习建立模型,我想我会用我熟悉的东西来做:传奇联盟。我很难用json中的值替换数据帧中的整数

我使用的数据集来自kaggle。你可以抓住它自己跑

我有json文件的形式:(它实际上必须更大,但我缩短了它)

和表单的数据框架

打印df

     gameDuration  t1_champ1id
0              1949            1
1              1851            2
2              1493            1
3              1758            1
4              2094            2
我想用json中的查找值替换t1_champ1id中的ID

如果这两个都是dataframe,那么我可以使用merge选项

这就是我尝试过的。我不知道这是否是读取json文件的最佳方式

import pandas
df = pandas.read_csv("lol_file.csv",header=0)
champ = pandas.read_json("champion_info.json", typ='series')


for i in champ.data[0]:
    for j in df:
        if df.loc[j,('t1_champ1id')] == i:
            df.loc[j,('t1_champ1id')] = champ[0][i]['name']
我得到以下错误:

标签[gameDuration]不在[index]中'

我不确定这是否是最有效的方法,但我也不确定如何做到这一点

你们怎么想


谢谢

对于df中的j:
迭代
df
中的列名,这是不必要的,因为您只希望与列
't1\u champ1id'
匹配。更好地使用pandas功能是将JSON文件中的id:name对压缩到字典中,然后将其映射到
df['t1\u champ1id']

player_names = {v['id']:v['name'] for v in json_file['data'].itervalues()}

df.loc[:, 't1_champ1id'] = df['t1_champ1id'].map(player_names)
#        gameDuration t1_champ1id
# 0          1949       Annie
# 1          1851        Olaf
# 2          1493       Annie
# 3          1758       Annie
# 4          2094        Olaf

对于df中的j:
迭代
df
中的列名,这是不必要的,因为您只希望与列
't1\u champ1id'
匹配。更好地使用pandas功能是将JSON文件中的id:name对压缩到字典中,然后将其映射到
df['t1\u champ1id']

player_names = {v['id']:v['name'] for v in json_file['data'].itervalues()}

df.loc[:, 't1_champ1id'] = df['t1_champ1id'].map(player_names)
#        gameDuration t1_champ1id
# 0          1949       Annie
# 1          1851        Olaf
# 2          1493       Annie
# 3          1758       Annie
# 4          2094        Olaf

从json文件中的“数据”创建了一个数据帧(也转换了生成的数据帧,然后将索引设置为要映射的id),然后将其映射到原始df

import json

with open('champion_info.json') as data_file:    
   champ_json = json.load(data_file)

champs = pd.DataFrame(champ_json['data']).T



champs.set_index('id',inplace=True)

df['champ_name'] = df.t1_champ1id.map(champs['name'])

从json文件中的“数据”创建了一个数据帧(也转换了生成的数据帧,然后将索引设置为要映射的id),然后将其映射到原始df

import json

with open('champion_info.json') as data_file:    
   champ_json = json.load(data_file)

champs = pd.DataFrame(champ_json['data']).T



champs.set_index('id',inplace=True)

df['champ_name'] = df.t1_champ1id.map(champs['name'])

当我运行“champion_info.json”时,我得到一条“str”对象没有“read”属性的错误消息。你知道这是为什么吗?我可以运行pandas.read_json('champion_info.json'),不过还可以。我还针对运行了json,它是“有效的”。很抱歉,请参阅更新的解决方案。您必须首先打开json文件,然后使用json load命令当我运行“champion_info.json”时,我得到一个“str”对象没有属性“read”错误消息。你知道这是为什么吗?我可以运行pandas.read_json('champion_info.json'),不过还可以。我还针对运行了json,它是“有效的”。很抱歉,请参阅更新的解决方案。您必须首先打开json文件,然后使用json加载命令。我知道您可以做类似的事情,但我不知道如何做。谢谢我知道你可以做像这样圆滑的事,但我不知道怎么做。谢谢