2017-05-20 11 views
5

डेटाफ्रेम इंडेक्स का एक डिफ़ॉल्ट प्रकार 'int64' है और मैं इसे 'int32' में बदलना चाहता हूं। मैंने इसे .set_index() और int32 के numpy सरणी के साथ बदलने की कोशिश की, dtype = np.int32 के साथ नई अनुक्रमणिका बनाने का भी प्रयास किया। यह काम नहीं किया, हमेशा int64 की अनुक्रमणिका लौट रहा है।int32 पर pandas डेटाफ्रेम के अनुक्रमणिका प्रकार को कैसे बदलें?

कोई व्यक्ति int32 आकार के साथ पांडा इंडेक्स का उत्पादन करने के लिए एक कार्य कोड दिखा सकता है?

मैं नवीनतम कोंडा पांडा पैकेज 0.20.1 का उपयोग करता हूं।

+1

यह संभव हो सकता है नहीं लगता है ... मैं गलत हो सकता है, लेकिन मुझे अभी तक कोई रास्ता नहीं मिला ... 'pd.Index (np.arange (10, dtype = np.32), dtype = np.int32)' - रिटर्न 'Int64Index ([...], dtype = 'int64') ' – MaxU

+0

ठीक है, मैंने वही किया और पता नहीं लगा सका। अब यहां स्रोत कोड को देखने का प्रयास कर रहे हैं https://github.com/pandas-dev/pandas/tree/c8dafb5a7ae9fe42b9d15c47082a6fb139e78b5d/pandas/core/indexes लेकिन यह नहीं पता कि यह परिवर्तन कहां होता है। – Stanpol

+0

[मुझे केवल "np.int64',' np.uint64' और 'np.float64' के लिए" न्यूमेरिक "इंडेक्स के लिए समर्थन मिल सकता है] (https://github.com/pandas-dev/pandas/blob/c8dafb5a7ae9fe42b9d15c47082a6fb139e78b5d/ पांडा/कोर/इंडेक्स/numeric.py) – MaxU

उत्तर

2

सुनिश्चित नहीं हैं कि इस अभ्यास में कर रही लायक कुछ है, लेकिन निम्न काम करना चाहिए:

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

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

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

(here से)

+1

पांडा में 0.22.0 यह अपेक्षा के अनुसार काम नहीं करता है। i.sort_values ​​इंडेक्स (बिल्कुल) आधा में कटौती करेगा। कोई विचार क्यों नहीं। 'i = np.arange (0, 600002, dtype = np.int32); arr = Int32Index (i, name = "i"); arr2 = arr.sort_values ​​(); प्रिंट 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 बदलता है।

संबंधित मुद्दे