我想将一列转换为整数,但问题是该列包含缺失值。列将转换为浮点数,但不能转换为整数。
示例代码:
d2 = {'location': ['NY', 'NY', 'PA', 'NY', 'PA', 'PA', 'NY'], 'dep_name': ['hr', 'mk', 'fin', 'fin', 'hr', 'fin', 'fin'], 'Duration_of_Employment' : [10, 5, 9, 8, 2, 4, 7], 'Salary' : [50000, 86000,25000, 73000, 28000, 60000, 40000], 'Days_Since_Last_Promotion': ['61', '35', '25', '98', 'NaN', '45', '22']}
df2 = pd.DataFrame(data = d2)
df2['xy'] = df2['Days_Since_Last_Promotion'].astype(float)
df2['Months_Since_Last_Promotion'] = df2['xy'] // 30
现在“ Months_Since_Last_Promotion”为浮点型。但是,当我尝试将其转换为整数时,会出现以下错误。
df2['Months_Since_Last_Promotion'] = df2['Months_Since_Last_Promotion'].astype(int)
ValueError:无法将NA转换为整数
从错误中,我发现了由于缺少Nan值而引起的错误,并尝试了解决方法。但是它没有起作用,并且'Months_Since_Last_Promotion'仍显示为float64。
df2.loc[df2['Months_Since_Last_Promotion'].notnull(), 'Months_Since_Last_Promotion'] = df2.loc[df2['Months_Since_Last_Promotion'].notnull(), 'Months_Since_Last_Promotion'].astype(int)
注意:我不能使用fillna替换NaN。目标是将列保持为整数。
答案 0 :(得分:2)
默认情况下,包含NaN
值的数字列存储为浮点数(即使所有其他数字均为整数)-这是由于熊猫的类型转换限制所致。这意味着如果您想按原样保留NaN
而不填充缺失值,则可能无法将列转换为整数(据我所知)。这是文档摘录:
“虽然熊猫支持存储整数和布尔类型的数组, 这些类型无法存储丢失的数据。直到我们可以 切换到在NumPy中使用本机NA类型,我们已经建立了一些 “广播规则”。当重新索引操作引入丢失的数据时, 系列赛将按照表格中介绍的规则进行 下面。”
请参考:
答案 1 :(得分:0)
实际上有一种方法:
https://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html
在您的情况下:
df2['Months_Since_Last_Promotion'] = pd.array(df2['Months_Since_Last_Promotion'], dtype=pd.Int64Dtype())
但是,请务必注意,其他软件可能无法将该列识别为int
列。我认为这与NaN
是python中的float
有关。