尝试将值写入给定特定条件的列,默认为Null值,代码如下:
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?
发布于 2018-09-28 05:35:12
找到正确的解决方案,它使用None作为默认值:
df['new_col'] = np.select([cond1, cond2], ['foo', 'bar'], default=None)发布于 2018-09-27 12:58:31
我自己测试过了,它表现得很好。手动检查np.select(conditions,choices,default=np.nan)的输出,可能choices中有"NaN“字符串。
尝试在dropna=True中手动指定.value_counts(),可能它被设置为默认为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))https://stackoverflow.com/questions/52536692
复制相似问题