1. ホーム
  2. python

pandas - df.index を float64 から unicode または文字列に変更する

2023-08-22 03:20:50

質問

データフレームのインデックス(行)をfloat64から文字列またはunicodeに変更したいのですが、可能でしょうか?

これでうまくいくと思ったのですが、どうやらそうではないようです。

#check type
type(df.index)
'pandas.core.index.Float64Index'

#change type to unicode
if not isinstance(df.index, unicode):
    df.index = df.index.astype(unicode)

エラーメッセージを表示します。

TypeError: Setting <class 'pandas.core.index.Float64Index'> dtype to anything other than float64 or object is not supported

どのように解決するのですか?

そのようにすることができます。

# for Python 2
df.index = df.index.map(unicode) 

# for Python 3 (the unicode type does not exist and is replaced by str)
df.index = df.index.map(str)

なぜintからfloatに変換するときと違う処理をするかというと、それはnumpy(pandasのベースとなっているライブラリ)の特殊性です。

numpyの配列はすべて d型 を持ちますが、これは基本的に マシン の型であり、その要素の : そのように numpyが直接ネイティブな型を扱うのは このように、numpyはPythonのオブジェクトではなく、ネイティブの型を直接扱うので、非常に高速であることが説明できます。つまり、int64からfloat64に型を変更する場合、numpyはC言語のコードで各要素をキャストします。

また、特殊なdtypeとして: オブジェクト という特別な型もあり、これは基本的に Python オブジェクトへのポインタを提供します。

文字列が必要な場合は、このように オブジェクトを使用しなければなりません。 を使わなければなりません。しかし .astype(object) を使っても、探している答えは得られません。 オブジェクト を持つインデックスを作成し、その中にPythonのfloatオブジェクトを入れます。

ここでは、mapを使用して、適切な関数でインデックスを文字列に変換します。numpyは文字列オブジェクトを取得し、インデックスに オブジェクト を持たなければならないことを理解します。なぜなら、それが文字列に対応できる唯一のデータ型だからです。