是否可以轻松删除Python Set对象的NaN值?鉴于NaN值不等于任何值(并且float('nan') is float('nan')
也是False
),您最终可以在Set中获得许多NaN值。
>>> a = set( (float('nan'), float('nan'), 'a') )
>>> a
{nan, nan, 'a'}
我能想出最好的定义像math.isnan这样的函数,但是它可以容忍非浮点类型,如:
def my_isnan(x):
try:
return math.isnan(x)
except TypeError:
return False
然后你可以使用这样的集合理解:
>>> {x for x in a if not my_isnan(x)}
{'a'}
答案 0 :(得分:12)
在实践中,您可以将nan != nan
视为一项功能而不是错误:
>>> a = {float('nan'), float('nan'), 'a'}
>>> a
{nan, nan, 'a'}
>>> {x for x in a if x==x}
{'a'}
从积极的方面来说,不需要辅助功能。从消极方面来说,如果你的非纳米物体也不等于它本身,那么你也会将其删除。
答案 1 :(得分:2)
您也可以使用filter
:
In[75]: a = set((float('nan'), float('nan'), 'a'))
In[76]: set(filter(lambda x: x == x , a))
Out[76]: {'a'}
答案 2 :(得分:1)
使用熊猫中的pd.notna(),例如:
In [219]: import pandas as pd
In [220]: a = set((float('nan'), float('nan'), 'a'))
In [221]: a = {x for x in a if pd.notna(x)}
In [222]: a
Out[222]: {'a'}
答案 3 :(得分:0)
我们可以简单地使用.remove()方法
In[1]: a = set([np.nan, "A"])
In[2]: a
Out: {'A', nan}
In[3]: a.remove(np.nan)
In[4]: a
Out: {'A'}
答案 4 :(得分:-1)
如果集合中没有nan值,则将引发错误。
改用 $measures = Measure::where('operation_id', $operation->name)
->whereBetween('time', [$from, $to])
->select(['time AS timestamp', 'meter_id AS usage_point_id', 'repartition_rate AS key'])
->get()->groupBy('timestamp');
。