2017-05-20 31 views
5

Một loại dType mặc định của chỉ mục DataFrame là 'int64' và tôi muốn thay đổi thành 'int32'. Tôi đã thử thay đổi nó bằng .set_index() và mảng cứng nhắc của int32, cũng đã thử tạo chỉ mục mới với dtype = np.int32. Nó không hoạt động, luôn luôn trả về chỉ số của int64.Làm thế nào để thay đổi chỉ số dtype của gấu trúc DataFrame thành int32?

Ai đó có thể hiển thị mã hoạt động để tạo chỉ mục gấu trúc có kích thước int32 không?

Tôi sử dụng gói gấu trúc conda mới nhất 0.20.1.

+1

nó dường như không thể ... Tôi có thể sai, nhưng tôi không thể tìm được cách nào ... 'pd.Index (np.arange (10, dtype = np.32), dtype = np.int32)' - trả về 'Int64Index ([...], dtype = 'int64') ' – MaxU

+0

Vâng, tôi đã làm như vậy và không thể tìm ra. Bây giờ, hãy thử xem qua mã nguồn tại đây https://github.com/pandas-dev/pandas/tree/c8dafb5a7ae9fe42b9d15c47082a6fb139e78b5d/pandas/core/indexes nhưng không thấy nơi thay đổi này xảy ra. – Stanpol

+0

[Tôi chỉ có thể tìm hỗ trợ cho 'np.int64',' np.uint64' và 'np.float64' cho chỉ mục" số "] (https://github.com/pandas-dev/pandas/blob/c8dafb5a7ae9fe42b9d15c47082a6fb139e78b5d/ pandas/core/indexes/numeric.py) – MaxU

Trả lời

2

Không chắc đây là một cái gì đó giá trị thực hiện trong thực tế, nhưng sau nên làm việc:

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

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

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

(từ here)

+1

Trong gấu trúc 0.22.0, điều này không hoạt động như mong đợi. i.sort_values ​​sẽ cắt chỉ mục trong (chính xác) một nửa. Không biết tại sao. 'i = np.arange (0, 600002, dtype = np.int32); arr = Int32Index (i, name = "i"); arr2 = arr.sort_values ​​(); in arr.shape, arr2.shape; khẳng định arr.shape == arr2.shape' – user48956

+0

@ user48956: đã chỉnh sửa để khắc phục sự cố cụ thể này –

1

Tất cả các đường dẫn mã tôi có thể tìm kiếm, cưỡng chế dtype:

Kiểm tra trong pandas.Index.__new__()

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

này cho phép đi qua một dtype, nhưng trong NumericIndex().__new__() ta có:

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

Mà thay đổi dtype.

Các vấn đề liên quan