python判断是否为nan
A. python中怎么判断一个浮点数是NaN
>>> a == 'NaN'
False
>>> a == nan
False
>>> a == float('NaN')
False
>>> isNaN(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
NameError: name 'isNaN' is not defined
以上几种方法,都可以试一下
B. 数据库中的空值与NULL的区别以及python中的NaN和None
NULL表示:不可用、未赋值、不知道、不适用,它既不是0也不是空格。记住:一个数值与NULL进行四则运算,其结果是NULL
空值和NULL的区别在于,在做count计算的时候:count(field_name),field_name的值为空值也会被计算在里面(这一行统计有效),而NULL不会
python有两种方式获取数据:
1. 一种是把数据从MySQL中导出到txt或者csv,然后本地读取;
2. 另一种是python直接链接数据库,读取数据;第一种把数据从MYSQL导出后,python读取时,空值和NULL在文件中都为NULL;Python读取之后为NaN
第二种链接数据库后,python能读取表结构,数据库的NULL对应列表中的None以及pandas中的NaN(如果字段类型是时间,则为NaT)。而数据库中的空字符,则被识别为空字符。
C. python 判断是否包含np.nan
1.使用series.unique() 发现其长度为18
而使用describe()中的count 或者dingdan_df['driver_phone'].value_counts()时为17个value,原因是后两者仅统计非空的值。
查找:
unique()得到的为一个ndarray,从而无法直接用list中的if np.nan in test1:来判断。
list求并交差:
http://blog.chinaunix.net/uid-200142-id-3992553.html
2.dictionary转DataFrame
dict.items()为一个dict_items类型的对象,需要转为list再传入,同时指定列名
gongdan_users=pd.DataFrame(list(gongdan_dic.items()),columns=['driver_phone','counts'])
D. 认识python中的inf和nan
认识python中的inf和nan
python中的正无穷或负无穷,使用float("inf")或float("-inf")来表示。
这里有点特殊,写成:float("inf"),float("INF")或者float('Inf')都是可以的。
当涉及 > 和 < 比较时,所有数都比无穷小float("-inf")大,所有数都比无穷大float("inf")小。
相等比较时,float("+inf")与float("+inf")、float("inf")三者相等。即:
同样地,float("-inf") == float("-inf") 返回也是True。
简单的加,减,乘操作,还是会返回无穷。
特别地,0 * float('inf') 结果为:nan
float('inf') / float('inf') 结果为:nan
float('inf') - float('inf') 结果为:nan
float('-inf') - float('-inf') 结果也为:nan
nan代表Not A Number(不是一个数),它并不等于0
因为nan不是一个数,所以相关计算都无法得到数字。
所有涉及nan的操作,返回的都是nan。
结果都是:nan
比较操作时,返回的都是False
特别注意两个float('nan')并不相等!
python中可以用math.isinf()与math.isnan()来判断数据是否为inf或nan。
numpy中也有相类似的方法可用来判断数据。
动手测试题:
0 / float('inf') == 0 / float('-inf') 结果是True 还是False?
参考资料:
Python 关于正负无穷float(‘inf’)的一些用法
https://blog.csdn.net/shennongzhaizhu/article/details/51997887
Stackoverflow.com上的问答:What is inf and nan?
https://stackoverflow.com/questions/17628613/what-is-inf-and-nan