我有一个包含两列的数据框,我打算将其转换为字典。第一列将成为键,第二列将成为值。
数据框:
id value
0 0 10.2
1 1 5.7
2 2 7.4
我该怎么做?
我有一个包含两列的数据框,我打算将其转换为字典。第一列将成为键,第二列将成为值。
数据框:
id value
0 0 10.2
1 1 5.7
2 2 7.4
我该怎么做?
lakes
是您的DataFrame
,您可以这样做area_dict = dict(zip(lakes.id, lakes.value))
请参阅文档中的to_dict
。您可以像这样使用它:
df.set_index('id').to_dict()
如果你只有一个列,为了避免列名也成为字典中的一个键(实际上,在这种情况下你可以使用 Series.to_dict()
):
df.set_index('id')['value'].to_dict()
- dalloliogmptest.set_index('id')['value'].to_dict()`
mydict = dict(zip(df.id, df.value))
如果你想简单地保留重复项,可以使用 groupby
:
>>> ptest = pd.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value'])
>>> ptest
id value
0 a 1
1 a 2
2 b 3
>>> {k: g["value"].tolist() for k,g in ptest.groupby("id")}
{'a': [1, 2], 'b': [3]}
这个问题在这个帖子里 Joris 的回答和在重复的帖子中 Punchagan 的回答都非常优美,但是如果用于键的列包含任何重复值,则它们将无法给出正确的结果。
例如:
>>> ptest = p.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value'])
>>> ptest
id value
0 a 1
1 a 2
2 b 3
# note that in both cases the association a->1 is lost:
>>> ptest.set_index('id')['value'].to_dict()
{'a': 2, 'b': 3}
>>> dict(zip(ptest.id, ptest.value))
{'a': 2, 'b': 3}
如果您有重复的条目且不想丢失它们,您可以使用这段难看但有效的代码:
>>> mydict = {}
>>> for x in range(len(ptest)):
... currentid = ptest.iloc[x,0]
... currentvalue = ptest.iloc[x,1]
... mydict.setdefault(currentid, [])
... mydict[currentid].append(currentvalue)
>>> mydict
{'a': [1, 2], 'b': [3]}
mydict = defaultdict(list)\n for (key, val) in ptest[["id", "value"]].itertuples(index=False):\n mydict[key].append(val)
- Midnighter我认为以下是最简单的解决方案:
df.set_index('id').T.to_dict('records')
示例:
df= pd.DataFrame([['a',1],['a',2],['b',3]], columns=['id','value'])
df.set_index('id').T.to_dict('records')
如果你有多个值,例如val1、val2、val3等,且你希望将它们作为列表,那么请使用以下代码:
df.set_index('id').T.to_dict('list')
在上面的链接中了解有关记录
的更多信息: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_dict.html
使用pandas可以这样做:
如果lakes是你的DataFrame:
area_dict = lakes.to_dict('records')
orient
的一个选项。 - Zheng Liumy_dict = {row[0]: row[1] for row in df.values}
在某些版本中,下面的代码可能无法正常工作。
mydict = dict(zip(df.id, df.value))
因此,要明确表达
id_=df.id.values
value=df.value.values
mydict=dict(zip(id_,value))
注意,我使用id_因为单词id是保留字。
df.id
,因为列名 id
不被识别为数据框变量,对吧?就像写入数据框对象库中的变量一样。我一定是误解了什么。 - Azurespotmydict = dict(zip(zip(df['A'],df['B']), df['C']))
使用Pandas的 to_dict() 也可以:
mydict = df.set_index(['A','B']).to_dict(orient='dict')['C']
在创建字典的那行代码执行之前,A或B列都没有被用作索引。
这两种方法都很快(在一台约2015年快速双核笔记本电脑上处理具有85k行的数据框时少于1秒)。
area_dict = dict(zip(lakes['id'], lakes['value']))
的意思是将lakes
数据集中的id
和value
列组合成一个字典area_dict
。翻译完成,无其他内容。 - jezraelarea_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column)))
。您该如何实现它? - jesseaam