Pandas将字符串和NaN(浮点数)列转换为整数,保留NaN。
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如果我表达不够清楚,请谅解,我在努力提高英语能力!
在这个问题中,主要问题是将包含字符串和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函数,但是得到的是浮点数而不是整数。