如何基于json文件的查找更改数据帧中的值
我想练习建立模型,我想我会用我熟悉的东西来做:传奇联盟。我很难用json中的值替换数据帧中的整数 我使用的数据集来自kaggle。你可以抓住它自己跑 我有json文件的形式:(它实际上必须更大,但我缩短了它) 和表单的数据框架 打印df如何基于json文件的查找更改数据帧中的值,json,pandas,dataframe,Json,Pandas,Dataframe,我想练习建立模型,我想我会用我熟悉的东西来做:传奇联盟。我很难用json中的值替换数据帧中的整数 我使用的数据集来自kaggle。你可以抓住它自己跑 我有json文件的形式:(它实际上必须更大,但我缩短了它) 和表单的数据框架 打印df gameDuration t1_champ1id 0 1949 1 1 1851 2 2 1493 1
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加载命令。我知道您可以做类似的事情,但我不知道如何做。谢谢我知道你可以做像这样圆滑的事,但我不知道怎么做。谢谢