Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么pandas.apply()在null元素上执行?_Python_Pandas - Fatal编程技术网

Python 为什么pandas.apply()在null元素上执行?

Python 为什么pandas.apply()在null元素上执行?,python,pandas,Python,Pandas,据推测,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):

据推测,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()
将熊猫作为pd导入
df=pd.系列([[1,2],[2,3,4,5],无])
df
0          [1, 2]
1    [2, 3, 4, 5]
2无
数据类型:对象
df.应用(λx:len(x))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\Alexander\Anaconda3\lib\site packages\pandas\core\series.py”,l
ine 2169,适用于
mapped=lib.map\u推断(值,f,convert=convert\u数据类型)
pandas.lib.map\u expert(pandas\li)中的文件“pandas\src\expression.pyx”,第1059行
b、 c:62578)
文件“”,第1行,在
TypeError:类型为“NoneType”的对象没有len()

None和nan在语义上是等价的。用numpy.nan替换None没有意义<代码>应用仍将函数应用于NaN元素

df[2] = numpy.nan
df.apply(lambda x: print(x))

Output: [1, 2]
        [2, 3, 4, 5]
        nan
您必须检查要应用或使用的函数中是否缺少值。dropna并将函数应用于结果:

df.dropna().apply(lambda x: print(x))
或者,使用
pandas.notnull()
返回一系列布尔值:

df[df.notnull()].apply(lambda x: print(x))
请同时阅读:

具体而言,这:

警告:

必须注意的是,在python(和numpy)中,nan的不存在 比较平等,但没有人能做到。请注意,Pandas/numpy使用了这个事实 那个np.nan!=np.nan,并且对待任何人都不像np.nan


更重要的是,作为科利恩回答的后续行动。如果要将输出重新分配给新列,请务必注意索引将不再匹配。为此:


df.loc[df.notnull(),'new_col']=df[df.notnull()].apply(lambda x:print(x))

你说“假定不适用于null元素”是什么意思?可能有帮助:
df.apply(lambda x:len(x),如果x不是None,则为None)
@BrenBarn,文档中说它不作用于空元素。@AlexanderWhattley:你能更具体地说明它在哪里说的吗?如果文件有误导性,可能需要澄清。(注:调用Series
df
有点让人困惑,因为这是数据帧的标准短名称。)所以我很好奇,为什么下面的代码可以工作:>>>导入pandas作为pd>>>a=pd.Series([1,2,3,4,None])>>a.apply(lambda x:x+1)0 2 1 3 4 NaN数据类型:float64为什么不呢?根据numpy,None+1=NaN,因为None被视为NaN(如上警告所述)。