ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Pandas将字符串列和NaN(浮点数)转换为整数,保持NaN

2019-08-28 20:08:45  阅读:1168  来源: 互联网

标签:python pandas nan type-conversion


参见英文答案 > Convert Pandas column containing NaNs to dtype `int`                                     11个
我在转换包含字符串格式(类型:str)和NaN(类型:float64)的2位数字的列时遇到问题.我想以这种方式获得一个新列:NaN,其中有NaN和整数,其中有两个数字的字符串格式.
举个例子:我想从列YearBirth1获取列Yearbirth2,如下所示:

YearBirth1  #numbers here are formatted as strings: type(YearBirth1[0])=str
        34  # and NaN are floats: type(YearBirth1[2])=float64.
        76
       Nan
        09
       Nan
        91

YearBirth2  #numbers here are formatted as integers: type(YearBirth2[0])=int
        34  #NaN can remain floats as they were. 
        76
       Nan
         9
       Nan
        91

我试过这个:

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

正如我所料,我得到了这个错误:

ValueError: cannot convert float NaN to integer

所以我尝试了这个:

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

并得到这个错误:

NameError: name 'NaN' is not defined

最后我试过这个:

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

没有错误,但当我检查列YearBirth2时,这是结果:

YearBirth2:
         1
         1
         1
         1
         1
         1

非常糟糕..我认为这个想法是对的,但是有一个问题让Python能够理解我对NaN的意思..或者我尝试的方法可能是错的..

我也使用了pd.to_numeric()方法,但这种方式我获得了浮点数,而不是整数.

有什么帮助?!
谢谢大家!

P.S:csv是我的DataFrame的名称;
对不起,如果我不太清楚,我正在改进英语!

解决方法:

您可以使用to_numeric,但不可能使用NaN值获取int – 它们始终转换为float:see na type promotions.

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

标签:python,pandas,nan,type-conversion
来源: https://codeday.me/bug/20190828/1755321.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有