なぜ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
を明らかにしますが、これは正しいです。
パンダは、int64
とfloat64
とobject
を区別します。 dtype str
がない場合の背後にあるロジックは何ですか? str
がobject
で覆われているのはなぜですか?
DtypeオブジェクトはNumPyに由来し、ndarrayの要素のタイプを記述します。 ndarrayのすべての要素は、バイト単位で同じサイズでなければなりません。 int64およびfloat64の場合、8バイトです。ただし、文字列の場合、文字列の長さは固定されていません。したがって、ndarrayに文字列のバイトを直接保存する代わりに、Pandasを使用して、オブジェクトへのポインターを保存するオブジェクトndarrayを使用します。
以下に例を示します。
受け入れられた答えは良いです。 ドキュメントを参照 という答えを提供したかっただけです。ドキュメントには次のように書かれています:
Pandasは、文字列の格納にオブジェクトdtypeを使用します。
主要なコメントには「心配しないで、このようになっているはずです」と書かれています。 (受け入れられた答えは「理由」を説明する素晴らしい仕事をしましたが、文字列は可変長です)
ただし、文字列の場合、文字列の長さは固定されていません。