Pandas将字符串和NaN(浮点数)列转换为整数,保留NaN。

8 浏览
0 Comments

Pandas将字符串和NaN(浮点数)列转换为整数,保留NaN。

我在将一个包含两位数字符串格式(类型:str)和NaN(类型:float64)的列转换时遇到了问题。我想要得到一个新的列,规则是:NaN保持不变,两位数字符串格式的数字转换为整数。\n例如:我想从列YearBirth1得到新的列YearBirth2,规则如下:\n

YearBirth1  #这里的数字是字符串格式:type(YearBirth1[0])=str
        34  # 而NaN是浮点数:type(YearBirth1[2])=float64.
        76
       Nan
        09
       Nan
        91
YearBirth2  #这里的数字是整数格式:type(YearBirth2[0])=int
        34  #NaN保持为浮点数。 
        76
       Nan
         9
       Nan
        91

\n我尝试了以下方法:\n

csv['YearBirth2'] = (csv['YearBirth1']).astype(int)

\n如我所预料的,我得到了以下错误:\n

ValueError: 无法将浮点数NaN转换为整数

\n所以我尝试了这个:\n

csv['YearBirth2'] = (csv['YearBirth1']!=NaN).astype(int)

\n得到了以下错误:\n

NameError: 未定义名称'NaN'

\n最后我尝试了这个:\n

csv['YearBirth2'] = (csv['YearBirth1']!='NaN').astype(int)

\n没有错误,但是当我检查列YearBirth2时,结果如下:\n

YearBirth2:
         1
         1
         1
         1
         1
         1

\n非常糟糕..我觉得思路是正确的,但是Python不能理解我对NaN的意思..或者说我尝试的方法是错误的..\n我还尝试了pd.to_numeric()方法,但是这样得到的是浮点数,不是整数..\n有人能帮忙吗?谢谢!\nP.S:csv是我DataFrame的名称;\n如果我表达不够清楚,请谅解,我在努力提高英语能力!

0
0 Comments

在这个问题中,主要问题是将包含字符串和NaN(float类型)的列转换为整数,同时保留NaN值。解决这个问题的方法是使用Pandas的to_numeric函数,但是to_numeric函数会将NaN值转换为浮点数。

解决方法是,使用to_numeric函数将列转换为数值类型,并通过设置参数errors='coerce'将无法转换的值强制转换为NaN。具体代码如下所示:

df['YearBirth2'] = pd.to_numeric(df.YearBirth1, errors='coerce')
print(df)

执行以上代码后,将得到以下结果:

  YearBirth1  YearBirth2
0         34        34.0
1         76        76.0
2        Nan         NaN
3         09         9.0
4        Nan         NaN
5         91        91.0

上述代码中,YearBirth1列被转换为数值类型,并赋值给新的列YearBirth2。NaN值被保留为NaN,并且其他值被正确转换为整数类型。

另外,文章中还提到作者之前尝试过使用pd.to_numeric函数,但是得到的是浮点数而不是整数。

0