numpy将整数转换为小数

时间:2018-10-16 18:02:59

标签: python pandas numpy

考虑以下代码

import numpy as np
import pandas as pd
myDict = ({"Row 1": [10, np.nan],
           "Row 2": [10, "NaN"]})
myDf = pd.DataFrame(myDict)

这将导致以下数据框

enter image description here

为什么使用np.nan在第一列中将int转换为小数?

4 个答案:

答案 0 :(得分:4)

熊猫在很多方面都依赖Numpy。其中包括空值np.nan。 Numpy将该值定义为dtype np.float。熊猫打算将数据框列存储为一维Numpy数组。 Numpy要求将所有值都强制转换为相同的dtype

如果Numpy的整数为空值,但还没有...,这将得到解决。

当熊猫阅读字典并意识到所有值都是数字时,它有两种选择。

  1. 将整个列设置为dtype object,并保留值[10, np.nan]
  2. 将整个列设置为dtype float,并增加整数[10.0, np.nan]

Pandas之所以选择第二个选项,是因为人们几乎总是会进行数值计算,并且float已针对此类事情进行了优化,而object并非如此。

在另一列上,[10, "Nan"]内有一个字符串,Pandas不会尝试将其放入float并将其保留为object。您可以自行解决。

答案 1 :(得分:1)

myDict = ({"Row 1": [10.0, np.nan],
       "Row 2": [10.0, "NaN"]})

这应该可以解决问题。如果没有,您可以更改熊猫数据框的值

myDf.apply(pd.to_numeric(errors="coerce"))

强制使您可以忽略nan值。

答案 2 :(得分:0)

尝试

import numpy as np
import pandas as pd
myDict = ({"Row 1": [10, np.nan],
       "Row 2": [10, "NaN"]})
myDf = pd.to_numeric(myDict, errors="coerce")

答案 3 :(得分:0)

我的猜测是,因为您在第二栏中使用了引号,所以将NaN视为字符串。这样,它就将第2列的数据类型分配为“对象”,而不是整数或浮点数。另外,np.nan被视为浮点数,因此第1列(包括整数和浮点数)被分配了更详细的浮点类型。

使用上面的代码,我运行了以下代码:

In[1]:
type(np.nan)
Out[1]:
float

In[2]:
type("NaN")
Out[2]:
str


In[3]:
myDf.info()

Out[3]:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
Row 1    1 non-null float64
Row 2    2 non-null object
dtypes: float64(1), object(1)
memory usage: 112.0+ bytes