【问题标题】:Creating dictionary from excel file (pandas dataframe)从excel文件(熊猫数据框)创建字典
【发布时间】:2020-08-17 08:25:16
【问题描述】:

我的 excel/pandas 数据框/文件看起来像这样:

+------+--------+
|  ID  | 2nd ID |
+------+--------+
| ID_1 |  R_1   |
| ID_1 |  R_2   |
| ID_2 |  R_3   |
| ID_3 |        |
| ID_4 |  R_4   |
| ID_5 |        |
+------+--------+

如何将其转换为 python 字典?我希望我的结果是这样的:

{'ID_1':['R_1','R_2'],'ID_2':['R_3'],'ID_3':[],'ID_4':['R_4'],'ID_5':[]}

我应该怎么做才能获得它?

【问题讨论】:

标签: python pandas dictionary


【解决方案1】:

如果需要删除不存在值的缺失值,请在 GroupBy.apply 的 lambda 函数中使用 Series.dropna

d = df.groupby('ID')['2nd ID'].apply(lambda x: x.dropna().tolist()).to_dict()
print (d)
{'ID_1': ['R_1', 'R_2'], 'ID_2': ['R_3'], 'ID_3': [], 'ID_4': ['R_4'], 'ID_5': []}

或者使用 fact np.nan == np.nan return False in list compehension 过滤非缺失值,也可以查看 docs 中的 warning 以获得更多解释。

d = df.groupby('ID')['2nd ID'].apply(lambda x: [y for y in x if y == y]).to_dict()

如果需要删除空字符串:

d = df.groupby('ID')['2nd ID'].apply(lambda x: [y for y in x if y != '']).to_dict()

【讨论】:

    【解决方案2】:

    在数据帧上应用一个函数,将值附加到您的字典中。 Apply 没有就地,因此您的字典将被创建。

    d = dict.fromkeys(df.ID.unique(), [])
    
    def func(x):
      
      d[x.ID].append(x["2nd ID"])
    
    # will return a series of Nones
    df.apply(func, axis = 1)
    

    编辑:

    我在 Gitter 上问过,@gurukiran07 给了我一个答案。您正在尝试做的是反向爆炸功能

    s = pd.Series([[1, 2, 3], [4, 5]])
    
    0    [1, 2, 3]
    1       [4, 5]
    dtype: object
    
    exploded = s.explode()
    
    0    1
    0    2
    0    3
    1    4
    1    5
    dtype: object
    
    exploded.groupby(level=0).agg(list)
    
    0    [1, 2, 3]
    1       [4, 5]
    dtype: object
    

    【讨论】:

    • 请不要只发布代码作为答案。请解释您的答案/实现。
    猜你喜欢
    • 2016-01-14
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2019-01-11
    • 2018-02-26
    相关资源
    最近更新 更多