2017-08-01 7 views
2

pandas DataFrameはintを浮動小数点として表示します。 しかし、これらのintをintとして表示したいと思います。pandas DataFrameはintを浮動小数点として表示します

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(Jupyter Notebook)の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)

へ3210

何か提案がありますか?

+0

列全体に 'dtype = object'を使用しない限り、列は混合データ型を持つことはできません。この場合、' pandas'を使用することさえできません。だから、 'pandas'(またはおそらく' numpy'配列)は 'float32'への型宣伝を使用しました –

答えて

2

pandas種類ごとに種類があります。したがって、各列には特定のdtypeがあります。 intをアップキャストした方が、列をdtype objectとして維持するのではなく、列全体をfloatにすることができると判断しました。

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は、デフォルトでNumPy 2D配列に基づいているため、すべて同じタイプの要素の2次元配列で構成されています。この場合、値の一部は浮動小数点型なので、浮動小数点型を選択します。異なるタイプの行を使用する場合は、別々の系列として追加する必要があります。詳細については、this answerを参照してください。

関連する問題