2014-01-09 3 views
64

왜 명시된 변환 후에도 선택한 열의 모든 항목이 문자열이지만 팬더에서 개체가 있다고 알려주는 이유는 무엇입니까? 그 중DataFrame의 문자열이지만 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 같습니다

내 DataFrame입니다. 나는 명시 적으로 문자열로 해당 개체를 변환 : type(df["attr2"].ix[0]가 정확한지, str을 알 수 있지만

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있다.

팬더는 int64float64object을 구별합니다. dtype str이 없을 때 그 뒤에있는 논리는 무엇입니까? object으로 인해 str이 처리되는 이유는 무엇입니까?

답변

104

dtype 객체는 NumPy에서 제공되며 ndarray의 요소 유형을 설명합니다. ndarray의 모든 요소는 동일한 크기의 바이트이어야합니다. int64 및 float64의 경우 8 바이트입니다. 그러나 문자열의 경우 문자열의 길이는 고정되어 있지 않습니다. 따라서 ndarray에 문자열의 바이트를 직접 저장하는 대신 Pandas는 객체에 대한 포인터를 저장하는 ndarray 객체를 사용합니다.이 때문에이 유형의 dtype은 ndarray가 object이기 때문입니다.

  • INT64 어레이는 4 INT64 값을 포함한다 : 여기

    는 일례이다.
  • 개체 배열에는 3 개의 문자열 개체에 대한 4 개의 포인터가 들어 있습니다.

enter image description here

+46

그래서 나는 당신이, IS 무슨 말을하는지 생각 "걱정하지 마십시오. 그것은 다음과 같이해야하는데?" –

관련 문제