如果字典数组由“nan”组成,则不返回任何条目

Posted

技术标签:

【中文标题】如果字典数组由“nan”组成,则不返回任何条目【英文标题】:If dictionary array consists of "nan" then return no entry 【发布时间】:2021-01-08 16:23:01 【问题描述】:

我有两个表格文件如下。

main.txt:

Food    Total
fruit   1500
vegetable   0
meat    0
grain   600
fish    65

和 sub.txt:

Food    Item    Count   Percent
fruit   apple   450 30
fruit   orange  300 20
fruit   banana  750 50
grain   rice    120 20
grain   maize   480 80
fish    salmon  65  100

我想将sub.txt 合并到main.txt,然后将其转换为列中的字典。所以我运行如下代码并生成输出:

>>> import pandas as pd
>>> 
>>> main = pd.read_csv("main.txt", sep="\t")
>>> sub = pd.read_csv("sub.txt", sep="\t")
>>> 
>>> out = (main.merge(sub, on='Food', how='left')
...         .groupby(['Food','Total'])['Item','Count','Percent']
...         .apply(lambda x: x.to_dict(orient='records')))
>>> 
>>> out
Food       Total
fish       65       ['Item': 'salmon', 'Count': 65.0, 'Percent': ...
fruit      1500     ['Item': 'apple', 'Count': 450.0, 'Percent': ...
grain      600      ['Item': 'rice', 'Count': 120.0, 'Percent': 2...
meat       0            ['Item': nan, 'Count': nan, 'Percent': nan]
vegetable  0            ['Item': nan, 'Count': nan, 'Percent': nan]
dtype: object

out 对象可以看出,nan 是在没有meatvegetable 的信息时创建的(因为Total 为0)。我试图为nan 的人返回空实体。因此,对于那些拥有nan 的人来说,我希望得到如下输出:

Food       Total
fish       65       ['Item': 'salmon', 'Count': 65.0, 'Percent': ...
fruit      1500     ['Item': 'apple', 'Count': 450.0, 'Percent': ...
grain      600      ['Item': 'rice', 'Count': 120.0, 'Percent': 2...
meat       0            []
vegetable  0            []
dtype: object

但我不知道如何删除整个实体并为nan 的人返回空。

【问题讨论】:

【参考方案1】:

我从另一篇帖子python dataframe to_dict by index, exclude NaN 中找到了答案。所以我只需要将dropna() 添加到apply 函数中即可。

.apply(lambda x: x.dropna().to_dict(orient='records')))

【讨论】:

以上是关于如果字典数组由“nan”组成,则不返回任何条目的主要内容,如果未能解决你的问题,请参考以下文章

Python中添加字典条目时逗号的作用

在 Swift 中,如何在由结构对象数组组成的字典中进行搜索?

字典映射返回Nan

字典条目都是一样的

Java里面字典dictionary怎么定义

pList writeToFile 字典数组 - 仅写入最后一个数组条目