pandas DataFrame将整数显示为浮点数

3

pandas DataFrame将整数显示为浮点数。 但我想将这些整数显示为整数。

X_train = train.iloc[:, 1:].values.astype('float32')
y_train = train.iloc[:, 0].values.astype('uint8')
X = test.values.astype('float32')

因此,数据类型为'float32'、'uint8'和'float32'。

在Jupyter Notebook中以DataFrame的形式显示X_train、y_train和X的最小值和最大值。

pd.DataFrame([[np.amin(X_train), np.amax(X_train)], 
              [np.amin(y_train), np.amax(y_train)], 
              [np.amin(X), np.amax(X)]], 
             columns = ['min', 'max'], 
             index = ['X_train', 'y_train', 'X'])

输出:

        min max
X_train 0.0 255.0
y_train 0.0 9.0
X       0.0 255.0

但是我期望:
        min max
X_train 0.0 255.0
y_train 0   9
X       0.0 255.0

但是...
print(np.amax(y_train))

输出为9(而不是9.0)

有什么建议吗?


列不能有混合数据类型,除非您对整个列使用dtype=object,在这种情况下,您可能根本不需要使用pandas。因此,pandas(或可能是底层的numpy数组)已经使用类型提升到float32 - juanpa.arrivillaga
2个回答

3

pandas 通过列来对数据进行类型分类。因此,每个列都有特定的 dtype。它决定了将 int 强制转换为 float 更好,这样整个列就可以成为 float 类型,而不是保持为 object 类型。

df = pd.DataFrame([
    [0., 255.],
    [0, 9],
    [0., 255.]
])

df

     0      1
0  0.0  255.0
1  0.0    9.0
2  0.0  255.0

df.dtypes

0    float64
1    float64
dtype: object

使用dtype = object以保留各个类型。
df = pd.DataFrame([
    [0., 255.],
    [0, 9],
    [0., 255.]
], dtype=object)

df

   0    1
0  0  255
1  0    9
2  0  255

df.dtypes

0    object
1    object
dtype: object

df.applymap(type)

                 0                1
0  <class 'float'>  <class 'float'>
1    <class 'int'>    <class 'int'>
2  <class 'float'>  <class 'float'>

我只建议将此用于报告目的。如果您想将其用于进一步的计算,您会失去许多效率。我建议花时间重新排列您的数据。


谢谢!你是对的,DataFrame中的每一列都有自己的数据类型。在交换行和列之后,它会产生所需的输出。 - René

1
默认情况下,DataFrame 由一个二维元素数组组成,所有元素类型相同,因为它是由 NumPy 二维数组支持的。在这种情况下,一些值是浮点数,因此选择了浮点数类型。如果您想要不同类型的行,则需要将它们作为单独的系列添加。有关更多信息,请参见this answer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接