developer tip

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

optionbox 2020. 9. 25. 07:47
반응형

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


왜 Pandas는 내가 객체를 가지고 있다고 말하는데, 선택된 열의 모든 항목은 명시 적 변환 후에도 문자열입니다.

이것은 내 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 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적용되는 이유는 무엇 object입니까?


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

다음은 예입니다.

  • int64 배열에는 4 개의 int64 값이 있습니다.
  • 객체 배열은 3 개의 문자열 객체에 대한 4 개의 포인터를 포함합니다.

여기에 이미지 설명 입력


받아 들여지는 대답은 좋습니다. 문서참조한 답변을 제공하고 싶었습니다 . 문서는 다음과 같이 말합니다.

Pandas는 문자열을 저장하기 위해 객체 dtype을 사용합니다.

주요 코멘트에서 "걱정하지 마세요. 이렇게해야합니다." (수용된 답변이 "이유"를 설명하는 데 큰 도움이되었지만 문자열은 가변 길이 임)

그러나 문자열의 경우 문자열의 길이가 고정되지 않습니다.

참고 URL : https://stackoverflow.com/questions/21018654/strings-in-a-dataframe-but-dtype-is-object

반응형