考虑以下代码
import numpy as np
import pandas as pd
myDict = ({"Row 1": [10, np.nan],
"Row 2": [10, "NaN"]})
myDf = pd.DataFrame(myDict)
这会产生以下数据框
为什么使用 np.nan 会将第一列中的 int 转换为小数?
最佳答案
Pandas 在很多方面都依赖于 Numpy。其中包括空值np.nan
。 Numpy 将该值定义为 dtype
np.float
。 Pandas 打算将数据帧列存储为一维 Numpy 数组。 Numpy 要求所有值都转换为相同的dtype
。
如果 Numpy 的整数为空值,则此问题将得到修复,但目前还没有。
当 Pandas 读取字典并意识到所有值都是数字时,它有两个选择。
- 将整个列转换为
dtype
object
并保留值[10, np.nan]
- 将整个列转换为
dtype
float
并增加整数[10.0, np.nan]
Pandas 选择第二个选项,因为几乎总是人们会进行数值计算,并且 float
针对此类事情进行了优化,而 object
则不然。
在另一列上,[10, "Nan"]
里面有一个字符串,Pandas 不会尝试将它们变成 float
并将它们保留为对象
。由您来修复它。
关于python - Numpy 将整数转为小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52841476/