データフレームのインデックス(行)を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配列にはdtypeがあり、これは基本的に要素のmachineタイプです:その方法でnumpyはPythonオブジェクトではなく、ネイティブタイプを直接処理します。したがって、dtypeをint64からfloat64に変更する場合、numpyはCコードの各要素をキャストします。
特別なdtypeもあります:object、基本的にPythonオブジェクトへのポインタを提供します。
したがって、文字列が必要な場合は、objectdtypeを使用する必要があります。ただし、.astype(object)
を使用しても、探している答えは得られません。代わりに、objectdtypeでインデックスを作成しますが、Python内部のオブジェクトをフロートします。
ここで、mapを使用して、適切な関数でインデックスを文字列に変換します。numpyは文字列オブジェクトを取得し、インデックスにobjectが必要であることを理解しますdtype。文字列を収容できる唯一のdtypeであるため。
python 3およびpandas 0.19以降のバージョンでは、次のことがうまくいくことがわかりました
# Python 3 (pandas 0.19 or latter versions)
df.index.astype(str, copy = False)