use*_*734 83 python numpy nan pandas
我正在使用pandas读取csv文件的两列,readcsv()然后将值分配给字典.列包含数字和字母的字符串.偶尔会出现一个单元格为空的情况.在我看来,读取到该字典条目的值应该是None,而是nan分配.当然,None它更具描述性,因为它具有空值,而nan只是说读取的值不是数字.
我的理解是否正确,None和之间的区别是nan什么?为什么nan分配而不是None?
此外,我的字典检查任何空单元格一直在使用numpy.isnan():
for k, v in my_dict.iteritems():
if np.isnan(v):
Run Code Online (Sandbox Code Playgroud)
但是这给了我一个错误,说我不能使用这个检查v.我想这是因为要使用整数或浮点变量,而不是字符串.如果是这样,我该如何检查v"空单元格"/ nan案例?
And*_*den 94
NaN被用作占位符丢失的数据一致的大熊猫,一致性好等特点.我通常将NaN读/翻译为"缺失".另请参阅文档中的"使用缺少数据"部分.
Wes在文档中选择了NA-representation':
经过多年的生产使用[NaN]至少在我看来已经证明,鉴于NumPy和Python的一般情况,它是最好的决定.特殊值NaN(非-A-数)被用作到处作为NA值,并有API函数
isnull和notnull可跨越dtypes被用于检测NA的值.
...
因此,我选择了Pythonic"实用性节拍纯度"方法并交换了整数NA功能,以便在浮点数和对象数组中使用特殊值来表示NA,并在NAs必须为时将整数数组提升为浮点数.介绍.
注意:包含缺失数据的整数系列的"gotcha"被上传到浮点数.
在我看来,使用NaN(over None)的主要原因是它可以使用numpy的float64 dtype存储,而不是效率较低的对象dtype,请参阅NA类型的促销.
# without forcing dtype it changes None to NaN!
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])
In [13]: s_bad.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
Run Code Online (Sandbox Code Playgroud)
杰夫评论(下面):
np.nan允许矢量化操作; 它是一个浮点值,而None根据定义,强制对象类型,它基本上禁用了numpy中的所有效率.所以快速重复3次:object == bad,float == good
这么说,许多操作可能仍然可以与None vs NaN一样好(但可能不受支持,即它们有时会产生令人惊讶的结果):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
Run Code Online (Sandbox Code Playgroud)
要回答第二个问题:
您应该使用pd.isnull并pd.notnull测试缺失数据(NaN).
hel*_*ker 16
NaN可以用作数学运算的数值,而None不能(或至少不应该).
NaN是一个数值,如IEEE 754浮点标准中所定义.
None是一个内部Python tipe(NoneType),在这种情况下更像是"不存在"或"空"而不是"数字无效".
其中的主要"症状"是,如果你对包含NaN的数组执行平均值或求和,即使是单个数组,也会得到NaN作为结果......
另一方面,您不能使用None操作数执行数学运算.
因此,根据具体情况,您可以使用None一种方法告诉您的算法不要在计算时考虑无效或不存在的值.这意味着算法应该测试每个值以查看它是否是None.
NumPy的有一些功能,以避免NaN值污染的结果,如nansum和nan_to_num例如.
| 归档时间: |
|
| 查看次数: |
61158 次 |
| 最近记录: |