2017-11-07 10 views
1

私は、ここでは理想的に私はidxmaxのこの使用法を学んだ場所からの質問でこれをコメントしているだろう新しいです:私は同じアプローチを使用し、以下のようにすぐに私は使用して私のコードthemselevesのpandasがdataframeのint値をfloatに変換するのはなぜですか?

df = pd.DataFrame(np.arange(16).reshape(4,4),columns=["A","B","C","D"],index=[0,1,2,3]) 

ある

df[(df>6)]このdfのint値はfloatに変更されますか?

 A B C D 
0 NaN NaN NaN NaN 
1 NaN NaN NaN 7.0 
2 8.0 9.0 10.0 11.0 
3 12.0 13.0 14.0 15.0 

パンダはなぜそうするのですか?また、私はどこかでdtype = objectをシリーズで使うこともできますが、そのようなことを避けるためにいくつかの方法がありますか?

+0

原因 'np.nan'はフロートhttps://stackoverflow.com/questions/12708807/numpy-integer-nanです – Wen

答えて

2

あなたはintは

df.astype(object).mask(df<=6) 
Out[114]: 
    A B C D 
0 NaN NaN NaN NaN 
1 NaN NaN NaN 7 
2 8 9 10 11 
3 12 13 14 15 

のように見えるしたくない場合は、hereでより多くの情報を探していることができ、かつhere

このトレードオフは、メモリとパフォーマンスの理由から、主に行われています結果のシリーズが引き続き「数値」になるようにします。 1つの可能性は、代わりにdtype = object配列を使用することです。

より多くの情報が約astype(object)

2
df.astype(object).mask(df<=6).applymap(type) 
Out[115]: 
       A    B    C    D 
0 <class 'float'> <class 'float'> <class 'float'> <class 'float'> 
1 <class 'float'> <class 'float'> <class 'float'> <class 'int'> 
2 <class 'int'> <class 'int'> <class 'int'> <class 'int'> 
3 <class 'int'> <class 'int'> <class 'int'> <class 'int'> 

制限はnumpyのとほとんどです。

  • ナンシーズndarrayは、単一のタイプであることができます。
  • 整数型のNULL値が存在しません。

私たちは、df[df > 6]を実行するとジレンマに陥ります。何が起きるかは、パンダはdfに等しい値を持つデータフレームを返します。ここでは、df > 6です。しかし、私が言ったように、整数のヌル値はありません。だから私たちは選択することができます。

  1. 使用Noneまたはヌル値についてnp.nan我々のヌルとして全体ndarray
  2. dtype==objectの使用 np.nanしながらと dtype==float

パンダのアレイ全体がのでフロートにアレイを作成することを選択します値を数値にしておくと、数字のdtypesとその計算の多くの利点が得られます。


オプション1
Siに変換することにより充填値とpd.DataFrame.where

df.where(df > 6, -1) 

    A B C D 
0 -1 -1 -1 -1 
1 -1 -1 -1 7 
2 8 9 10 11 
3 12 13 14 15 

オプション2
pd.DataFrame.stackloc
を使用ヌグル次元では、矩形グリッドの欠損値をNULLで埋める必要はありません。

df.stack().loc[lambda x: x > 6] 

1 D  7 
2 A  8 
    B  9 
    C 10 
    D 11 
3 A 12 
    B 13 
    C 14 
    D 15 
dtype: int64 
関連する問題