Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将存储在dataframe单元格中的JSON对象的键值连接成每行一个字符串? 我的问题是:_Python_Json_Pandas_Dataframe - Fatal编程技术网

Python 如何将存储在dataframe单元格中的JSON对象的键值连接成每行一个字符串? 我的问题是:

Python 如何将存储在dataframe单元格中的JSON对象的键值连接成每行一个字符串? 我的问题是:,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,如何将存储在dataframe单元格中的JSON对象的键值连接成每行一个字符串?对不起,我觉得我的问题很简单,但我找不到一个好的表达方式 我的背景是: 假设我有一个熊猫数据框df,它包含一个名为“参与者”的列。单元格值是JSON对象,例如: df['participants'][0] == df.participants[0] == [{'participantId': 1, 'championId': 7 }, {'participantId': 2, 'championId':

如何将存储在dataframe单元格中的JSON对象的键值连接成每行一个字符串?对不起,我觉得我的问题很简单,但我找不到一个好的表达方式

我的背景是: 假设我有一个熊猫数据框df,它包含一个名为“参与者”的列。单元格值是JSON对象,例如:

df['participants'][0] == df.participants[0] ==

[{'participantId': 1,
  'championId': 7 },
 {'participantId': 2,
  'championId': 350 },
 {'participantId': 3,
  'championId': 266 },
 {'participantId': 4,
  'championId': 517 },
 {'participantId': 5,
  'championId': 110, },
...
...
{'participantId': 10,
'championId': 10 }]
df.参与者[1]
将包含完全不同的信息,具有相同的结构。如果有人感兴趣的话,这是传奇联盟RiotWatcher python API为每场比赛提供的数据的一部分

我的目标是,对于每一个
participantId
,将其连接到df中每一行的一个字符串中,这样我们就有了一个新的列“x”,它包含每一行的字符串
'7350266517110'
,具体取决于参与者列中的内容

我的工作解决方案是: (旁注:我避免使用列表,因为我已经读到列表没有在pandas中矢量化,这意味着它们速度较慢。这就是为什么我在这里使用字符串。)

然而,由于我的数据大约有10万行长,这似乎不是最快的解决方案,特别是因为我认为嵌套for循环速度较慢,对吗

有可能像这样做吗

df['x']=[str(df_d1['participants'][key][value]。获取('championId')作为key,df['participants']中的值]

我认为使用单个for循环的一种方法是利用json库,如:

for i in range(0, 20):
    x = str(pd.json_normalize(df_d1.participants[i])['championId'].values)
    df['x'] = x
有人遇到过类似的事情吗?你找到了解决这个问题的无痛方法吗?我的解决方案需要一些时间

谢谢!

In[16]:df['x']=df['participants'].map(lambda x:','.join(str(i['participanti'])表示i In x))
…:打印(df['participants'][0])
…:打印(df['x'][0])
...:
[{'ParticipanId':1,'championId':7},{'ParticipanId':2,'championId':350},{'ParticipanId':3,'championId':266}]
1, 2, 3
for i in range(0, 20):
    x = str(pd.json_normalize(df_d1.participants[i])['championId'].values)
    df['x'] = x