Datetype型への変換

扱っているデータ

(投信の)基準価額のヒストリカルデータ

          date      0      1     2      3  ...      6      7    8      9     10
0     20110104   8227  11282  7527  10879  ...   7620  10396  443   8833  14122
1     20110105   8335  11391  7529  10960  ...   7705  10394  444   8769  14090
2     20110106   8476  11465  7532  10868  ...   7561  10359  450   8737  14488
3     20110107   8467  11366  7537  10906  ...   7614  10368  451   8682  14319
4     20110111   8315  11111  7534  10829  ...   7232  10375  449   8752  14317
...        ...    ...    ...   ...    ...  ...    ...    ...  ...    ...    ...
2218  20200127  20593  32664  7245   9691  ...  20419  10492  928  21272   8659
2219  20200128  20506  31948  7239   9694  ...  20191  10489  922  21314   8538
2220  20200129  20660  32232  7232   9640  ...  20232  10492  926  21385   8605
2221  20200130  20428  32352  7236   9653  ...  20391  10509  912  21478   8598
2222  20200131  20141  32117  7231   9660  ...  20144  10508  916  21646   8477

[2223 rows x 12 columns]

やりたいこと

  1. date列に入っている変数をdatetype型へ変更

  2. date列をインデックスに設定

  3. 基準価額のヒストリカルデータを、収益率(変化率)で置き換える

やったこと

date列に入っている変数をdatetype型へ変更

データの型をいじるには、まずはいじろうとしている変数の型を知ろうということで、次の関数を使用

type()

変数を引数として、そのデータ型を戻り値とする関数

今回の扱っているデータのdate列の要素の一つを例に関数を実行すると、

print (df.at[0,'date'])
print (type(df.at[0,'date']))

結果

20110104
<class 'numpy.int64'>

ほう、数値型なのか

本当であれば今すぐにでもdatetype型へ変換したい気持ちはだが、数値型を直接datetype型へ変換するような方法は小職には見つけられず、泣く泣く一度文字列へ変換する次第

数値型→文字型への変換は以下のメソッド

.astype()

pandasの要素のデータ型を変換するならこれ

文字型へ変換したいなら、.astype(str)

以下のようにすると、列ごと変換できた

df['date']=df['date'].astype(str)#数値型を文字型へ
print (df.at[0,'date'])
print (type(df.at[0,'date']))

結果

20110104
<class 'str'>

目的はあくまでdatetype型へ変換するので、ここで満を辞して変換するメソッドの登場

pandas.to_datetime()

これも以下のように列ごと変換できた

df['date']=pd.to_datetime(df['date'])#文字列型をdatetypeへ
print (type(df.at[0,'date']))

結果

20110104
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

これにて無事datetypeへの変換を完了

date列をインデックスに設定

pandasデータフレーム.set_index(列名)

これだけなので、特に説明なし

基準価額のヒストリカルデータを、収益率(変化率)で置き換える

pandasデータフレーム.pct_change()

pandasデータフレーム.dropna()

まとめ

なんかほんとにただのメモみたいになってしまった

まとめは、困ったらググること

最後に、今回の分のコードのまとめとできたデータフレーム

コード

df['date']=df['date'].astype(str)#数値型を文字型へ
df['date']=pd.to_datetime(df['date'])#文字列型をdatetypeへ

df=df.set_index('date')

df_return0=df.pct_change()
df_return=df_return0.dropna()

得られたdf_return

                 0         1         2   ...        8         9         10
date                                      ...                              
2011-01-05  0.013128  0.009661  0.000266  ...  0.002257 -0.007246 -0.002266
2011-01-06  0.016917  0.006496  0.000398  ...  0.013514 -0.003649  0.028247
2011-01-07 -0.001062 -0.008635  0.000664  ...  0.002222 -0.006295 -0.011665
2011-01-11 -0.017952 -0.022435 -0.000398  ... -0.004435  0.008063 -0.000140
2011-01-12  0.008058  0.026640  0.000664  ...  0.002227 -0.000114  0.022700
...              ...       ...       ...  ...       ...       ...       ...
2020-01-27 -0.007327  0.002794 -0.000414  ... -0.012766 -0.001971 -0.028933
2020-01-28 -0.004225 -0.021920 -0.000828  ... -0.006466  0.001974 -0.013974
2020-01-29  0.007510  0.008889 -0.000967  ...  0.004338  0.003331  0.007847
2020-01-30 -0.011229  0.003723  0.000553  ... -0.015119  0.004349 -0.000813
2020-01-31 -0.014049 -0.007264 -0.000691  ...  0.004386  0.007822 -0.014073

[2222 rows x 11 columns]