如何在pandas中将DataFrame转换为字典,不包括索引

95

我有一个数据框 df,如下所示:

| name  | coverage |
|-------|----------|
| Jason | 25.1     |

我想将它转换成字典。 我在 pandas 中使用了以下命令:
dict=df.to_dict()
< p> dict 的输出结果如下:
{'coverage': {0: 25.1}, 'name': {0: 'Jason'}} 

我不希望在输出结果中出现0,我认为这是由于我的数据框df中的列索引所导致的。我该怎么做才能消除输出结果中的0?(我不希望索引被捕捉。)期望输出:
{'coverage': 25.1, 'name': 'Jason'} 
5个回答

98
dict1 = df.to_dict('records')
或者
dict2 = df.to_dict('list')

列表:键为列名,值为列数据的列表

记录:每一行都变成一个字典,其中键是列名,值是单元格中的数据


97
当我看到你的数据集有2列时,我看到的是一个系列而不是一个数据帧。
尝试这样做:d = df.set_index('name')['coverage'].to_dict(),这将把你的数据帧转换为一个系列并输出。
然而,如果你的意图是拥有更多的列而不是一个共同的键,你可以使用'records'将它们存储在一个数组中。 d = df.to_dict('r')
可运行的代码:
import pandas as pd

df = pd.DataFrame({
    'name': ['Jason'],
    'coverage': [25.1]
})

print(df.to_dict())
print(df.set_index('name')['coverage'].to_dict())
print(df.to_dict('records'))

返回:

{'name': {0: 'Jason'}, 'coverage': {0: 25.1}}
{'Jason': 25.1}
[{'name': 'Jason', 'coverage': 25.1}]

还有一件事,请尽量避免使用变量名dict,因为它是保留字。
更新于2013年11月1日。现在根据评论使用'records'代替'r'。

3
太好了,魔法变量。感谢您的回答,这正是我需要的 :) - user528025
2
太棒了..这就是我在寻找的答案。 - Deepak
1
谢谢!Pandas很棒,但有时候它的选择非常奇怪。 - Julek
1
这刚好解决了我几个小时以来一直存在的问题。谢谢。 - artemis
df.to_dict('r') 不再起作用。它会引发 ValueError(f"orient '{orient}' not understood")。df.to_dict('records') 似乎可以产生结果(正如其他答案所说)。 - Baza86

9
您可以像这样做:
data.to_dict('list')

#output:
#{'Feeling low in energy-slowed down': [2, 4, 2, 4]}

1
如果只有一列,切片这一列(它会被转换为Series),并用dict函数包装。
dict( myDF.iloc[:, -1] )
# [: , -1] means: return all rows, return last column)

{Jason: 25.1}

-1

zip应该是另一个选择 dict = dict(zip(df ['name'],df ['coverage']))


1
目标是使用列标签作为字典键,但这样做并不行。 - AlexK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接