pandas DataFrame将整数显示为浮点数

时间:2017-08-01 18:29:32

标签: python pandas dataframe

pandas DataFrame将整数显示为浮点数。 但是我希望将这些整数显示为整数。

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'。

在DataFrame中显示X_train,y_train和X的最小值和最大值(在Jupyter Notebook中)。

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)

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

pandas按列键入内容。因此,每列都有一个特定的dtype。它确定向上推广int更好,以便整个列可以float,而不是将列保持为dtype 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'>

我只会将其用于报告目的。如果要将其用于进一步计算,则会失去许多效率。我会花时间重新安排你的数据。

答案 1 :(得分:0)

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