如果字典数组由“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
是在没有meat
和vegetable
的信息时创建的(因为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”组成,则不返回任何条目的主要内容,如果未能解决你的问题,请参考以下文章