Pandas の文字列型の数値を数値型に変換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import pandas as pd import investpy import altair as alt import datetime economic_data2 = investpy.economic_calendar(time_zone = None , time_filter = 'time_only' , countries = [ 'japan' , 'united states' ], from_date = '01/01/2021' , to_date = '31/01/2021' ) ISM = economic_data[economic_data[ 'event' ]. str .contains( 'ISM Non-Manufacturing PMI' )] date2 = [] for i in ISM[ 'date' ]: new_date = datetime.datetime.strptime(i, "%d/%m/%Y" ).strftime( "%Y-%m-%d" ) date2.append(new_date) ISM[ 'date' ] = ISM[ 'date' ]. str .replace( '/' , '-' ) ISM[ 'date' ] = date2 ISM.fillna( 0 ) |
これで取得した経済指標のデータを計算できるように数値変換する
1 2 | previous_score = ISM[ 'actual' ].tail( 1 ) previous_score |
でみると
1 2 | 2598 64.0 Name: actual, dtype: object |
となるが数値ではなくオブジェクトになっている
Pandasで欠損のある列の文字列型の数値を数値型に変換する
を参考に数値に変換する
文字列を数値にするには
padas.to_numeric() を使う
errors には
raise がデフォルトで例外が発生
ignore は例外を抑えるが何も変換せずにそのままのオブジェクトを返す
coerce は数値変換できるものだけ変換しあとはNaN にする
これを利用して
1 2 | previous_score2 = pd.to_numeric(ISM[ 'actual' ],errors = "coerce" ) previous_score2.tail( 1 ) |
とすれば
1 2 | 2598 64.0 Name: actual, dtype: float64 |
となる
これで数値化できたので
計算もできるようになる
1 2 | print (previous_score2.tail( 1 ) - 1 ) print ( 62 - previous_score2.tail( 1 )) |
とすると結果は
1 2 3 4 | 2598 63.0 Name: actual, dtype: float64 2598 - 2.0 Name: actual, dtype: float64 |
となった
これで経済指標の結果と前回の予測値との差分を計算して表示できる