Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x 通过np.select的“默认”参数输入空值_Python 3.x_Numpy - Fatal编程技术网

Python 3.x 通过np.select的“默认”参数输入空值

Python 3.x 通过np.select的“默认”参数输入空值,python-3.x,numpy,Python 3.x,Numpy,尝试在给定特定条件下将值写入列,默认值为空值,代码如下: import pandas as pd import numpy as np df = pd.DataFrame({'col': list('ABCDE')}) cond1 = df['col'].eq('A') cond2 = df['col'].isin(['B', 'E']) df['new_col'] = np.select([cond1, cond2], ['foo', 'bar'], default=np.NaN) 但它

尝试在给定特定条件下将值写入列,默认值为空值,代码如下:

import pandas as pd
import numpy as np
df = pd.DataFrame({'col': list('ABCDE')})

cond1 = df['col'].eq('A')
cond2 = df['col'].isin(['B', 'E'])

df['new_col'] = np.select([cond1, cond2], ['foo', 'bar'], default=np.NaN)
但它在列中给出'nan'作为字符串值

df['new_col'].unique()
#array(['foo', 'bar', 'nan'], dtype=object)

有没有办法从这段代码中直接将其更改为null?

只是自己测试了一下,它运行正常。手动检查np.selectconditions,choices,default=np.nan的输出,可能选项中的某个地方有nan字符串

尝试在.value\u counts中手动指定dropna=True,也许它被设置为默认的False smh

我用什么来测试它:

import numpy as np
import pandas as pd

iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
iris['sepal_length'] = np.select(iris.values[:,:4].T>5, iris.values[:,:4].T, default=np.nan)

print(iris['sepal_length'].value_counts())
print(iris.sepal_length.value_counts(dropna=False))

找到了正确的解决方案,该解决方案使用None作为默认值:

df['new_col'] = np.select([cond1, cond2], ['foo', 'bar'], default=None)

你怎么知道它是字符串值?df.col.value\u counts不应该显示空值的计数。但确实如此。它显示了nan的计数。然后开始查看代码的其余部分,因为尽管pandas有缺陷,但错误更可能出现在此处未显示的代码生成条件或选择中的某个地方。正如我前面所说的,其他代码都很好。我仍然有相同的问题。没有选择的余地。不确定您如何无法复制。我使用的是熊猫版本0.20.3。您使用的是哪个版本?还使用df.col.value\u countsdropna=True进行了测试。还是一样,使用0.23.4。添加了我用来测试它的代码。有趣的是,对于我来说,使用default=NaN仍然正确地使用NaN。我不知道你怎么不能复制。刚刚试着做了一个df.col.isnull.sum。它为我显示0个空值。这是与版本相关的问题吗?这里的Numpy版本是1.13.1。很容易检查您是否运行了我在答案中编辑的代码。如果它能工作,那么一定会有一些进展,比如对string或smth-idk的强制类型转换。