Python 熊猫将字符串列和NaN(浮点)转换为整数,保留NaN

Python 熊猫将字符串列和NaN(浮点)转换为整数,保留NaN,python,pandas,type-conversion,nan,Python,Pandas,Type Conversion,Nan,我在转换一个列时遇到问题,该列同时包含字符串格式(类型:str)和NaN(类型:float64)的两位数。我想得到一个这样的新列:NaN是NaN,整数是2位数的字符串格式。 例如:我想从列YearBirth1获取列Yearbirth2,如下所示: YearBirth1 #numbers here are formatted as strings: type(YearBirth1[0])=str 34 # and NaN are floats: type(YearBirth1[

我在转换一个列时遇到问题,该列同时包含字符串格式(类型:str)和NaN(类型:float64)的两位数。我想得到一个这样的新列:NaN是NaN,整数是2位数的字符串格式。 例如:我想从列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)
csv['YearBirth2'] = (csv['YearBirth1']!=NaN).astype(int)
csv['YearBirth2'] = (csv['YearBirth1']!='NaN').astype(int)
正如我所料,我得到了这个错误:

ValueError: cannot convert float NaN to integer
NameError: name 'NaN' is not defined
所以我试了一下:

csv['YearBirth2'] = (csv['YearBirth1']).astype(int)
csv['YearBirth2'] = (csv['YearBirth1']!=NaN).astype(int)
csv['YearBirth2'] = (csv['YearBirth1']!='NaN').astype(int)
得到了这个错误:

ValueError: cannot convert float NaN to integer
NameError: name 'NaN' is not defined
最后,我尝试了以下方法:

csv['YearBirth2'] = (csv['YearBirth1']).astype(int)
csv['YearBirth2'] = (csv['YearBirth1']!=NaN).astype(int)
csv['YearBirth2'] = (csv['YearBirth1']!='NaN').astype(int)
没有错误,但当我检查列YearBirth2时,结果如下:

YearBirth2:
         1
         1
         1
         1
         1
         1
非常糟糕。。我认为这个想法是正确的,但是让Python能够理解我对NaN的意思存在一个问题。。也许我尝试的方法是错误的

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

有人帮忙吗?! 谢谢大家

注意:csv是我的数据帧的名称; 对不起,如果我不是很清楚,我在提高英语语言

您可以使用,但无法使用
NaN
值获取
int
——它们总是转换为
float


我忘了说我也试过pd.to_numeric,但这样我得到的是浮点数,而不是整数。你不能,
NaN
不能用整数表示,所以你需要接受浮点数,或者用可以用整数表示的东西替换
NaN
。好吧,如果NaN仍然是浮点数,没问题,但是我想要“string 2digits number”要转换为int,而不是浮动,这真的是不可能的?!在pandas中,这是不可能的,通常可以使用混合的数据类型,但对于纯数字类型,数据类型将需要是同质的。您的原始列有字符串和
NaN
这是允许的,如果您有int、strings和float,这是允许的,但纯数字列必须是所有int/floatsOk,我不知道,谢谢EdChum的解释!