据说,pandas.apply()函数不适用于null元素。但是,在下面的代码中不会发生这种情况。为什么会这样呢?
import pandas as pd
df = pd.Series([[1,2],[2,3,4,5],None])
df
0 [1, 2]
1 [2, 3, 4, 5]
2 None
dtype: object
df.apply(lambda x: len(x))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Alexander\Anaconda3\lib\site-packages\pandas\core\series.py", l
ine 2169, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas\src\inference.pyx", line 1059, in pandas.lib.map_infer (pandas\li
b.c:62578)
File "<stdin>", line 1, in <lambda>
TypeError: object of type 'NoneType' has no len()
None和nan在语义上是等效的。用numpy.nan替换None没有意义。apply
仍会将功能应用于NaN元素。
df[2] = numpy.nan
df.apply(lambda x: print(x))
Output: [1, 2]
[2, 3, 4, 5]
nan
您必须在要应用或使用pandas.dropna
的函数中检查缺少的值,并将该函数应用于结果:
df.dropna().apply(lambda x: print(x))
另外,可以使用usepandas.notnull()
返回一系列布尔值:
df[df.notnull()].apply(lambda x: print(x))
另请阅读:http : //pandas.pydata.org/pandas-docs/stable/missing_data.html
具体来说:
警告:
必须记住,在python(和numpy)中,nan的比较不相等,但None可以。注意,Pandas / numpy使用np.nan!= np.nan的事实,并将None视为np.nan。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句