2017-05-20 4 views
5

DataFrameインデックスのデフォルトのdtypeは 'int64'で、 'int32'に変更したいと思います。 .set_index()とint32のnumpy配列で変更しようとしましたが、dtype = np.int32で新しいインデックスを作成しようとしました。それは動作しませんでした、常にint64のインデックスを返します。pandas DataFrameのインデックスdtypeをint32に変更するにはどうすればよいですか?

誰かがint32サイズのpandasインデックスを作成する作業コードを表示できますか?

私は最新のconda pandasパッケージ0.20.1を使用しています。

+1

私が間違っている可能性が...可能ではないようですしかし、私はまだ道を見つけることができませんでした。 '' Int64Index([...]、dtype = np.int32) 'int64') ' – MaxU

+0

まあ、私は同じことをして、把握できませんでした。ソースコードを見てみると、https://github.com/pandas-dev/pandas/tree/c8dafb5a7ae9fe42b9d15c47082a6fb139e78b5d/pandas/core/indexesになりますが、この変更がどこで起こるかわかりません。 – Stanpol

+0

は(https://github.com/pandas-dev/pandas/blob/c8dafb5a7ae9fe42b9d15c47082a6fb139e78b5d/ [私は唯一の "数値" インデックスの 'np.int64'、' np.uint64'と 'np.float64'のサポートを見つけることができます] pandas/core/indexes/numeric.py) – MaxU

答えて

2

ない、これは実際にやって価値のあるものですが、以下は動作するはずです確認してください。(hereから)

class Int32Index(pd.Int64Index): 
    _default_dtype = np.int32 

    @property 
    def asi8(self): 
     return self.values 

i = Int32Index(np.array([...], dtype='int32')) 

+1

pandas 0.22.0では、これは期待どおりに動作しません。 i.sort_valuesはインデックスを(正確に)半分にカットします。理由は分かりません。 'i = np.arange(0、600002、dtype = np.int32); arr = Int32Index(i、name = "i"); arr2 = arr.sort_values(); print arr.shape、arr2.shape; assert arr.shape == arr2.shape' – user48956

+0

@ user48956:この特定の問題を修正するために編集されました –

1

私は見つけることができるコードパスのすべて、DTYPEを強制:

チェックpandas.Index.__new__()

if issubclass(data.dtype.type, np.integer): 
    from .numeric import Int64Index 
    return Int64Index(data, copy=copy, dtype=dtype, name=name) 

でこれはDTYPEを渡すことができますが、NumericIndex().__new__()に我々が持っている:

if copy or not is_dtype_equal(data.dtype, cls._default_dtype): 
    subarr = np.array(data, dtype=cls._default_dtype, copy=copy) 

dtypeを変更します。

関連する問題