在下面的代码中,我生成了一些包含值np.nan的数据:
import pandas as pd
import numpy as np
n = 20
df = pd.DataFrame({"x": np.random.choice(["dog","cat",np.nan],n), "y": range(0,n)})
字符串
随后,我通过函数pd.notnull检查缺失值,这并不表示存在任何缺失值:
pd.notnull(df["x"])
型
好吧,原因是在创作中使用的np.nan不知何故被翻译成了字符串“nan”。但是为什么呢?例如,如果我用表达式中的None值替换np.nan,即如果我通过np.random.choice([“dog”,“cat”,None],n)创建数据,那么一切都正常。
有人能解释一下为什么np.nan没有正确转换吗?一般而言:如何在不使用np.nan或None对象的情况下为字符串列创建随机缺失数据?
2条答案
按热度按时间sauutmhj1#
np.random.choice
创建了一个numpy数组,它只能保存一种类型的数据,你可以尝试用dtype=float
手动设置数据类型(nan是一个浮点数),但这对字符串值不起作用。字符串
edit:你可以将dtype设置为object,那么代码就可以工作了:
型
7qhs6swi2#
至于为字符串列创建随机缺失数据,可以使用
.mask()
:字符串