복붙노트

[PYTHON] DataFrame의 문자열이지만 dtype은 object입니다.

PYTHON

DataFrame의 문자열이지만 dtype은 object입니다.

명시된 변환 후에도 선택한 열의 모든 항목이 문자열이지만 개체가 있다고 팬더가 알려주는 이유는 무엇입니까?

이것은 내 DataFrame입니다 :

<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)

5 개는 dtype 객체입니다. 내가 명시 적으로 그 개체를 문자열로 변환 :

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"] 형식 (dt [ "attr2"])에도 여전히 dtype 객체가 있지만, ix [0]은 str을 나타냅니다.

팬더는 int64와 float64 및 객체를 구별합니다. dtype str이 없을 때 그 뒤에있는 논리는 무엇입니까? 왜 str이 객체로 덮여 있습니까?

해결법

  1. ==============================

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

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

    다음은 그 예입니다.

  2. from https://stackoverflow.com/questions/21018654/strings-in-a-dataframe-but-dtype-is-object by cc-by-sa and MIT license