2017-08-01 73 views
2

大熊猫数据帧显示为整数花车。 但我想显示这些整数作为整数。大熊猫数据框中显示整数作为浮动

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

所以,dtypes是'float32','unit8'和'float32'。

显示分钟,并X_train,y_train和X在一个数据帧最大值(在Jupyter笔记本)。

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)

有什么建议吗?

+0

列不能有混合数据类型,除非你使用'D型= object'整个列,在这种情况下,你可能也甚至不使用'pandas'。所以,'pandas'(或者可能是底层'numpy'数组)已经使用类型提升到'float32' –

回答

2

pandas类型的列的东西。所以每一列都会有一个特定的dtype。它确定了坯连铸int更好,这样整列可float而不是保持列D型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'> 

我只用这个报告的目的。如果你想用这个进行进一步的计算,你会失去很多效率。我会花时间重新安排您的数据。

+0

谢谢!你是对的,DataFrame中的每一列都有它自己的dtype。交换行和列之后,它会给出所需的输出。 – Rene

0

DataFrame默认由作为所有相同类型的元件的2D阵列的,因为它是由一个NumPy的2D阵列的支持。在这种情况下,你的一些值是浮点数,所以它选择了一个浮点类型。如果你想拥有不同类型的行,你需要将它们作为单独的系列添加。有关更多信息,请参阅this answer