2016-09-25 81 views
4

我有以下的数据帧,我想转换数值列“B”为整转换浮到int和离开零点

a b  c 
0 1 NaN  3 
1 5 7200.0 20 
2 5 580.0 20 

下面的代码抛出异常 “ValueError异常:无法转换NA为整型“

df['b'] = df['b'].astype(int) 

我该如何将浮点数转换为int并将空值保留原样?

+0

请问为什么?看起来丑陋?整数数组不能有'NaN' – Jeon

+0

我得到你,所以我应该首先将NaN替换为0,然后将列转换为int? – billboard

+0

如果你真的想,0,-1或你可以区分的东西 – Jeon

回答

2

np.NaN是浮点唯一的东西,所以它必须被删除才能创建一个整数pd.Series。 Jeon的建议工作很棒如果0在df['b']中不是有效值。例如:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'a': [1, 5, 5], 'b': [np.NaN, 7200.0, 580.0], 'c': [3, 20, 20]}) 
print(df, '\n\n') 

df['b'] = np.nan_to_num(df['b']).astype(int) 

print(df) 

是否有有效0的,那么你可以先用一些独特的价值(例如,-999999999)全部更换,该转换上面,然后用0替换这些独特的价值观。

无论哪种方式,你必须记住,你有0的地方有一次NaNs。在进行各种数值分析时(例如,平均值等),您需要小心过滤掉这些数据。