2014-01-09 60 views
64

爲什麼Pandas告訴我我有對象,儘管所選列中的每個項目都是一個字符串 - 即使在顯式轉換之後。數據框中的字符串,但dtype是對象

這是我的數據框:

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 56992 entries, 0 to 56991 
Data columns (total 7 columns): 
id   56992 non-null values 
attr1   56992 non-null values 
attr2   56992 non-null values 
attr3   56992 non-null values 
attr4   56992 non-null values 
attr5   56992 non-null values 
attr6   56992 non-null values 
dtypes: int64(2), object(5) 

其中有五個是dtype object。我明確這些對象轉換爲字符串:

for c in df.columns: 
    if df[c].dtype == object: 
     print "convert ", df[c].name, " to string" 
     df[c] = df[c].astype(str) 

然後,df["attr2"]仍然有dtype object,雖然type(df["attr2"].ix[0]揭示str,這是正確的。

熊貓區分int64float64object。當沒有dtype str時,它背後的邏輯是什麼?爲什麼涵蓋str

回答

104

dtype對象來自NumPy,它描述了ndarray中元素的類型。 ndarray中的每個元素必須具有相同的字節大小。對於int64和float64,它們是8個字節。但對於字符串,字符串的長度不固定。因此,不要直接在ndarray中保存字符串的字節,Pandas使用對象ndarray來保存指向對象的指針,因爲這種類型的ndarray的dtype是對象。

下面是一個例子:

  • 所述的int64數組包含4 Int64值。
  • 對象數組包含4個指向3個字符串對象的指針。

enter image description here

+46

所以我認爲你說的話是,「不要擔心。這應該是這個樣子」? –

相關問題