当NaN存在时,pandas是否有任何变通方法将INT转换为Float?

时间:2016-09-08 12:13:49

标签: python pandas int

尝试将我的列格式化为INT,因为1.0 2.0 3.0导致了我如何使用数据的问题。我尝试的第一件事是df['Severity'] = pd.to_numeric(df['Severity'], errors='coerce')。虽然看起来它最初起作用,但当我写入csv时,它又恢复为浮动状态。接下来,我尝试使用df['Severity'] = df['Severity'].astype(int),然后使用df['Severity'] = df['Severity'].astype(int, errors='coerce')进行另一次尝试失败,因为这对我来说似乎是一个合理的解决方案。

我做了一些挖掘大熊猫的事情。 docs并发现了关于pandas如何处理NAs的信息:

Typeclass   Promotion dtype for storing NAs
floating    no change
object  no change
integer cast to float64
boolean cast to object

我觉得奇怪的是,当我运行df.info()时,我得到Severity 452646 non-null object

示例数据:

Age,Severity
1,1
2,2
3,3
4,NaN
5,4
6,4
7,5
8,7
9,6
10,5

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:1)

由您自己决定如何处理缺失值没有正确的方法,因为它取决于您。您可以使用 function valdateMe() { $.getScript("validate.js", function(){ }); } 删除它们,也可以使用dropna替换/填充它们,请注意,无法使用整数表示replace/fillnahttps://en.wikipedia.org/wiki/NaN#Integer_NaN

NaNobject的原因是因为你现在混合了整数和浮点数。根据操作的不同,整个系列可能会升级到dtype,但在你的情况下,你有混合的dtypes。

答案 1 :(得分:0)

从熊猫0.24(2019年1月)开始,可以通过使用nullable integer data type,使用arrays.IntegerArray表示数据来做您想做的事情:

In [83]: df.Severity
Out[83]:
0    1.0
1    2.0
2    3.0
3    NaN
4    4.0
5    4.0
6    5.0
7    7.0
8    6.0
9    5.0
Name: Severity, dtype: float64

In [84]: df.Severity.astype('Int64')
Out[84]:
0      1
1      2
2      3
3    NaN
4      4
5      4
6      5
7      7
8      6
9      5
Name: Severity, dtype: Int64