如何将数据框转换为字典

190

我有一个包含两列的数据框,我打算将其转换为字典。第一列将成为键,第二列将成为值。

数据框:

    id    value
0    0     10.2
1    1      5.7
2    2      7.4

我该怎么做?

21个回答

4

不丢失重复条目的另一种(稍微短一些)解决方案:

>>> ptest = pd.DataFrame([['a',1],['a',2],['b',3]], columns=['id','value'])
>>> ptest
  id  value
0  a      1
1  a      2
2  b      3

>>> pdict = dict()
>>> for i in ptest['id'].unique().tolist():
...     ptest_slice = ptest[ptest['id'] == i]
...     pdict[i] = ptest_slice['value'].tolist()
...

>>> pdict
{'b': [3], 'a': [1, 2]}

请阅读[答案],并始终记住,你不仅要解决手头的问题,还要教育提问者和未来的读者。因此,请[编辑]答案,包括为什么它起作用的解释。 - Adriaan

3
如果您的DataFrame名称为“lakes”,您也可以执行以下操作:
# Your dataframe
lakes = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lakes.set_index('co tp', inplace=True)

我的解决方案:

area_dict = lakes.set_index("area")["count"].to_dict()

或者 @punchagan 的解决方案(我更喜欢这个)

area_dict = dict(zip(lakes.area, lakes.count))

两种都可以使用。


请阅读[答案],并始终记住,您不仅要解决手头的问题,还要教育提问者和任何未来的读者。因此,请[编辑]答案,包括为什么它有效的解释。 - Adriaan

3
如果您想尝试使用pandas,请按以下方式操作。但我更喜欢punchagan的方法。
# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}

2

你需要这个IT。

area_dict = lakes.to_dict(orient='records')

2
你好,如果你能帮助我们理解你的代码是如何解决 OP 的问题的,那就太棒了! - Simas Joneliunas
1
这只是重复了AnandSin在2018年的现有回答。 - TylerH

1
你需要一个字典值的列表。这段代码可以解决问题。
from collections import defaultdict
mydict = defaultdict(list)
for k, v in zip(df.id.values,df.value.values):
    mydict[k].append(v)

1
如果您设置索引,那么字典将会生成唯一的键值对。
encoder=LabelEncoder()
df['airline_enc']=encoder.fit_transform(df['airline'])
dictAirline= df[['airline_enc','airline']].set_index('airline_enc').to_dict()

1

编辑:

以下方法也可以达到相同的结果:

filter_list = df[df.Col.isin(criteria)][['Col1','Col2']].values.tolist()

原始帖子:

我遇到了类似的问题,我想要将一个数据框筛选成一个结果列表。

这是我的解决方案:

filter_df = df[df.Col.isin(criteria)][['Col1','Col2']]
filter_list = filter_df.to_dict(orient='tight')
filter_list = filter_list['data']

结果: 列表的列表

来源: pandas.DataFrame.to_dict


1

这里有很多答案使用了dict(zip(...))语法,但也可以不用zip实现。

mydict = dict(df.values)                        # {0.0: 10.2, 1.0: 5.7, 2.0: 7.4}
# or for faster code, convert to a list
mydict = dict(df.values.tolist())               # {0.0: 10.2, 1.0: 5.7, 2.0: 7.4}

如果一个列是int,另一个列是float,则将其转换为object dtype并调用dict()
mydict = dict(df.astype('O').values)            # {0: 10.2, 1: 5.7, 2: 7.4}
mydict = dict(df.astype('O').values.tolist())   # {0: 10.2, 1: 5.7, 2: 7.4}

如果索引是键,那就更简单了。
mydict = df['value'].to_dict()                  # {0: 10.2, 1: 5.7, 2: 7.4}

0
如果值列中存在重复的值,并且我们想在字典中保留重复的值,则下面的代码可以帮助解决问题。
df = pd.DataFrame([['a',1],['a',2],['a',4],['b',3],['b',4],['c',5]], columns=['id', 'value'])

df.groupby('id')['value'].apply(list).to_dict()

output : {'a': [1, 2, 4], 'b': [3, 4], 'c': [5]}

-1
def get_dict_from_pd(df, key_col, row_col):
    result = dict()
    for i in set(df[key_col].values):
        is_i = df[key_col] == i
        result[i] = list(df[is_i][row_col].values)
    return result

这是我的解决方案;一个基本的循环。


请阅读[答案],并始终记住,您不仅要解决手头的问题,还要教育提问者和任何未来的读者。因此,请[编辑]答案,包括为什么它有效的解释。 - Adriaan

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