如何解决从Excel文件创建字典Pandas DataFrame
我的excel / pandas dataframe /文件看起来像这样:
+------+--------+
| 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':[]}
我应该怎么做才能获得它?
解决方法
如果需要删除不存在的值的缺失值,请在Series.dropna
的lambda函数中使用GroupBy.apply
:
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': []}
或者使用事实np.nan == np.nan
在列表理解中返回False
来过滤不丢失的值,也请检查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()
,
在数据框上的行上应用一个函数,该函数会将值附加到字典。 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,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,5]
dtype: object
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。