DataFrame 内の文字列ですが、dtype はオブジェクトです 質問する

DataFrame 内の文字列ですが、dtype はオブジェクトです 質問する

明示的に変換した後でも、選択した列のすべての項目が文字列であるにもかかわらず、Pandas はオブジェクトがあると表示するのはなぜですか。

これは私のデータフレームです:

<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 objecttype(df["attr2"].ix[0]str

Pandas は、int64ととfloat64を区別しますobject。 がない場合、その背後にあるロジックは何ですか?が でカバーされるのはdtype strなぜですか?strobject

ベストアンサー1

オブジェクトはdtypeNumPy から来ており、 内の要素の型を記述しますndarray。 内のすべての要素は、ndarrayバイト単位で同じサイズである必要があります。 と の場合int64float64それらは 8 バイトです。ただし、文字列の場合、文字列の長さは固定ではありません。そのため、文字列のバイトを に直接保存する代わりにndarray、Pandas はオブジェクト を使用します。このオブジェクトndarrayは、オブジェクトへのポインタを保存します。このため、dtypeこの種類の はndarrayオブジェクトです。

次に例を示します。

  • int64 配列には 4 つの int64 値が含まれます。
  • オブジェクト配列には、3 つの文字列オブジェクトへの 4 つのポインターが含まれています。

ここに画像の説明を入力してください

おすすめ記事