这在R中很容易做到,我想知道在Python中是否是直接的,我只是遗漏了一些东西,但是在Python中如何创建一个NaN值和Null值的向量呢?我尝试使用np.full函数来完成。
R代码:
vec <- vector("character", 15)
vec[1:15] <- NA
vec
Python代码
unknowns = np.full(shape = 5, fill_value = ???, dtype = 'str')
'''test if fill value worked or not'''
random.seed(1177)
categories = np.random.choice(['web', 'software', 'hardware', 'biotech'], size = 15, replace = True)
categories = np.concatenate([categories, unknowns])
example = pd.DataFrame(data = {'categories': categories})
example['transformed'] = [ x if pd.isna(x) == False else 'unknown' for x in example['categories']]
print(example['transformed'].value_counts())
这将导致在值计数总数中出现5个unknown。理想情况下,我想知道如何为NaN和Null编写fill_value,并知道它是否因变量类型而不同。我已经尝试了np.nan使用和不使用string数据类型。我已经尝试了None和Null使用和不使用引号。我想不出还有什么可以尝试的,我开始怀疑这是否可行。提前感谢您,如果这个问题已经得到解决,我很抱歉,因为我在这方面缺乏知识。
3条答案
按热度按时间ogsagwnx1#
你可以用
None
或np.nan
在Python中创建一个只包含缺失值的数组,如下所示:回到您的示例,这样做很好:
最后,这条线的效率很低。
example['transformed'] = [ x if pd.isna(x) == False else 'unknown' for x in example['categories']]
在使用panda时,您确实希望避免循环和列表解析
对于大型数据,这将运行得更快:
example['transformed'] = example.categories.apply(lambda s: s if s else 'unknown')
wn9m85ua2#
这里有一个打字问题。
如果你在
numpy
中工作,向量是在初始化之后被输入的。给一个用字符串初始化的向量赋值np.nan
会试图合并成一个字符串:但是,如果您在问题的后半部分使用
pandas
,则handling missing data有一种单独的方法:byqmnocz3#
在Pandas中创建空Series的简单方法:
输出量:
或者,对于字符串dtype:
输出量: