CSVファイルデータのデータ型変換について: astype しても dtype が変わらない


下記のコードでコラムTOPIX dのデータをString型に変えようとしているのですが、  
`data.dtypes`でデータ型を確認すると、オリジナルと変わらずobject型のままで表示されます。

どうしてでしょうか・・・・・

[code]

    import pandas as pd
    import numpy as np
    
    df = pd.read_csv("forcasting topx.csv", header=0)
    
    #冒頭数行を削除
    data = df.drop([0,1,2,3])
    
    #型の変更
    data['TOPIX d'].astype(np.str)
    data.dtypes
    
[/code]




文字列に関しては、`numpy`と`pandas`で扱いが異なります。`numpy`は配列の中に文字列を固定長で持つ`np.str`型がありますが、`pandas`の方はDataFrameの中で文字列を持つことはなくオブジェクトへのポインターだけを持っているので`object`型となります。`pandas`で`np.str`型にしたいと思っても変換することはできません。

データをString型に変えようとするのか理由がわかりませんが、もともと文字列になる要素であれば、DataFrameの個々の要素は`str`型になっているので何も心配をする必要はありません。

また、要素の中に数値が含まれていて、それを文字列に変更したいのであれば、`astype(str)`で変換できます。`DataFrame`を`dtypes`で調べると`object`型のままですが、個々の要素の型を調べるときちんと`str`型になっています。

[code]

    data = pd.DataFrame([['a'], ['b'], [3]])
    >>> data = pd.DataFrame([['a'], ['b'], [3]])
    >>> type(data.iloc[2,0])
    <class 'int'>
    >>> data[0] = data[0].astype(str)
    >>> type(data.iloc[2,0])
    <class 'str'>    
    
[/code]

