我对pandas代码有一个小问题。我使用np.where命令根据条件创建一个新列并返回1或0.但是对于np.where,NaN值返回为0,但我想将它们作为空格返回。如果我理解正确的np.where,那是不可能直接的。 x y z q被定义为索引。我可以通过以下方式实现这一目标:
column1
x NaN
y Yes
z No
q Maybe
df.fillna("EMPTY", inplace=True)
df["column2"] = np.where((df["column1"]=="Yes")|(df["column1"]=="Maybe"), 1, np.where(df["column1"]=="EMPTY", "", 0))
column1 column2
x EMPTY ""
y Yes 1
z No 0
q Maybe 1
因此它测试column1是否包含值"是"或者"可能"如果true返回1,如果为false则检查它是否包含" EMPTY"如果true返回空白,如果返回false,则使用fillna将空白NaN替换为EMPTY。这有效但是当它写入excel时,所有值都存储为文本而不是数字,因为我使用""在值为EMPTY(最初为NaN)的行中填充空白。
这可以通过pd.to_numeric来解决,它将值转换为1.0和0.0并在空白处创建NaN。当再次使用fillna("")时,我能够提出请求的结果,但是有更有效的方法来实现以下结果吗?在将数据框导入excel时,将值存储为数字非常重要,并且NaN值为空白。
答案 0 :(得分:0)
是否有更有效的方法来实现以下结果?
是。一种方法是将dict
传递给df.replace
,它应该可以很好地工作。
x = {np.nan: '', 'No': 0, 'Yes': 1, 'Maybe': 1}
df.replace(x)
column1
x
y 1
z 0
q 1
如果要将此应用于单个列,则过程相同。只需稍后再分配结果。
df.column1 = df.column1.replace(x)
df
column1
x
y 1
z 0
q 1