2014-01-09 22 views
64

なぜ、Pandasは私にオブジェクトがあると伝えますが、明示的に変換しても、選択した列のすべての項目は文字列です。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です。私は明示的に文字列にそれらのオブジェクトを変換する: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はオブジェクトです。ここ

は一例であり:

  • Int64のアレイが4 Int64の値を含みます。
  • オブジェクト配列には、3つの文字列オブジェクトに対する4つのポインタが含まれています。

enter image description here

+46

だから私は、あなたが、あると言っているものだと思う「それについては心配しないでください。このようなことになっていますか」? –

関連する問題