【发布时间】:2017-01-16 08:48:39
【问题描述】:
尝试将我的列格式化为 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') 失败,因为这对我来说似乎是一个合乎逻辑的解决方案。
我对 pandas 的文档进行了一些挖掘,发现了有关 pandas 如何处理 NA 的内容:
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
任何帮助将不胜感激:)
【问题讨论】:
-
不幸的是,我发现这是熊猫的限制。
-
嗯,这是一个相当大的耻辱,让我很难过:(
-
您必须删除它们或用整数值替换它们,
NaN不能用整数表示,这与 pandas 无关,更多与 numpy 和一般意义上的数字表示有关计算机语言的限制。 C++ 和 python 以及许多其他语言可能存在同样的问题。你得到object作为dtype,因为这里的类型是混合的,请参见:en.wikipedia.org/wiki/NaN -
@EdChum,谢谢!将 NaN 设置为 0 适用于我的应用程序。
-
特别是在那篇维基文章中:en.wikipedia.org/wiki/NaN#Integer_NaN