【问题标题】:pandas: creating a dataframe from a dictionarypandas:从字典创建数据框
【发布时间】:2017-07-03 03:08:41
【问题描述】:

拿词典:

dict = {'a':'ham', 'b': 'ham', 'c': 'chicken', 'd': 'beef', 'e': 'chicken'}

如何获取此字典并将其转换为以列为值的数据框?即我想要一个数据框显示:

   ham   chicken  beef
0   a       c       d
1   b       e       

似乎根本无法得到这种形式!

谢谢

这是一个不同的问题,另一个只是询问如何将字典的值放入数据框中,我在询问如何获得我概述的特定表格

【问题讨论】:

  • 这是一个不同的问题,我不知道为什么这被标记为重复
  • 顺序重要吗?您可能需要将其转换为某种记录形式的有序数据。

标签: python pandas


【解决方案1】:

一点点转换“魔法”:

import pandas as pd

d = {'a':'ham', 'b': 'ham', 'c': 'chicken', 'd': 'beef', 'e': 'chicken'}

new_dict = dict()
for key in d:
    col = d[key]
    try:
        new_dict[col].append(key)
    except:
        new_dict[col] = [key]

df = pd.DataFrame.from_dict(new_dict, orient='index').transpose()
print(df)

#   chicken ham  beef
# 0       c   a     d
# 1       e   b  None

首先,浏览您的原始字典并在名为new_dict 的新字典中创建一个列表。从这个电话from_dict()orient='index'

【讨论】:

    【解决方案2】:

    我看到 Jan 刚刚发布了一个很好的答案,但我想表明您也可以使用 defaultdict 和列表推导来做到这一点。

    import pandas as pd
    from collections import defaultdict
    
    dict1 = {'a':'ham', 'b': 'ham', 'c': 'chicken', 'd': 'beef', 'e': 'chicken'}
    
    # Set the default as an empty list to store multiple strings with an order
    reversed_dict = defaultdict(list)
    
    # Reverse the key-value pairs
    for k, v in dict1.items():
        reversed_dict[v].append(k)
    
    # Convert each list to a Series and make the dataframe
    pd.DataFrame(dict([(k, pd.Series(v)) for k, v in reversed_dict.items()]))
    
    #   beef chicken ham
    # 0    d       c   a
    # 1  NaN       e   b
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2022-09-28
      • 2016-10-22
      • 1970-01-01
      • 2018-07-14
      相关资源
      最近更新 更多