明示的に変換した後でも、選択した列のすべての項目が文字列であるにもかかわらず、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 object
type(df["attr2"].ix[0]
str
Pandas は、int64
ととfloat64
を区別しますobject
。 がない場合、その背後にあるロジックは何ですか?が でカバーされるのはdtype str
なぜですか?str
object
ベストアンサー1
オブジェクトはdtype
NumPy から来ており、 内の要素の型を記述しますndarray
。 内のすべての要素は、ndarray
バイト単位で同じサイズである必要があります。 と の場合int64
、float64
それらは 8 バイトです。ただし、文字列の場合、文字列の長さは固定ではありません。そのため、文字列のバイトを に直接保存する代わりにndarray
、Pandas はオブジェクト を使用します。このオブジェクトndarray
は、オブジェクトへのポインタを保存します。このため、dtype
この種類の はndarray
オブジェクトです。
次に例を示します。
- int64 配列には 4 つの int64 値が含まれます。
- オブジェクト配列には、3 つの文字列オブジェクトへの 4 つのポインターが含まれています。