numpy 如何在Python中创建NA或Null值数组?

lrpiutwd  于 2022-11-29  发布在  Python
关注(0)|答案(3)|浏览(308)

这在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使用和不使用引号。我想不出还有什么可以尝试的,我开始怀疑这是否可行。提前感谢您,如果这个问题已经得到解决,我很抱歉,因为我在这方面缺乏知识。

ogsagwnx

ogsagwnx1#

你可以用Nonenp.nan在Python中创建一个只包含缺失值的数组,如下所示:

np.full(shape=5, fill_value=None)
np.full(shape=5, fill_value=np.nan)

回到您的示例,这样做很好:

import numpy as np
import pandas as pd

unknowns = np.full(shape=5, fill_value=None)
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())

最后,这条线的效率很低。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')

wn9m85ua

wn9m85ua2#

这里有一个打字问题。
如果你在numpy中工作,向量是在初始化之后被输入的。给一个用字符串初始化的向量赋值np.nan会试图合并成一个字符串:

import numpy as np

v1 = np.array(['a', 'b', 'c'])
v1[0] = np.nan
# v1 = array(['n', 'b', 'c'], dtype='<U1')

v2 = np.array(['ab', 'cd', 'ef'])
v2[0] = np.nan
# v2 = array(['na', 'cd', 'ef'], dtype='<U2')

v3 = np.array(['abc', 'def', 'ghi'])
v3[0] = np.nan
# v3 = array(['nan', 'def', 'ghi'], dtype='<U3')

但是,如果您在问题的后半部分使用pandas,则handling missing data有一种单独的方法:

import pandas as pd

df = pd.DataFrame({"x": [pd.NA, "Hello", "World"]})
byqmnocz

byqmnocz3#

在Pandas中创建空Series的简单方法:

s = pd.Series(index=range(15))

输出量:

0     NaN
1     NaN
2     NaN
3     NaN
4     NaN
5     NaN
6     NaN
7     NaN
8     NaN
9     NaN
10    NaN
11    NaN
12    NaN
13    NaN
14    NaN
dtype: float64

或者,对于字符串dtype:

s = pd.Series(index=range(15), dtype='string')

输出量:

0     <NA>
1     <NA>
2     <NA>
3     <NA>
4     <NA>
5     <NA>
6     <NA>
7     <NA>
8     <NA>
9     <NA>
10    <NA>
11    <NA>
12    <NA>
13    <NA>
14    <NA>
dtype: string

相关问题