Python でCSVファイルを読みこんでもこのままでは分析に使えないので、データの整形が必要になります。

この記事は以下のような人におすすめ。
- pandas で不要なヘダーの削除方法を知りたい
- numpyを使ってセル内の不要な記号を消したい。
- データ型を変換する方法を知りたい。
プログラミング無料体験はこちら↓↓↓
データの種類によって整形方法が変わりますが、今回のデータの場合、まず不要なヘダーを消すことから始めましょう。
データはこちらの「pythonでデータ分析:CSVファイルの読み込みと表示」で読み込んだデータを使っています。
Pandasによるデータ整形:不要なヘダーの削除
まず目につくのが「国債金利情報」っていう行ですね。
この行が分析の邪魔になるので、さっそく消してみましょう言いたいところですが、それよりも簡単な方法があります。
CSVデータを読み込む際に、2行目から読み込むように指定すれば、一行目は読み込まれません。
記述は下記の通り。
import pandas as pd
df = pd.read_csv('jgbcm_all.csv', encoding = 'shift-jis', header = 1) # header を1に指定する
display(df)
行を消すために格闘するよりも、簡単に消せました。
次に気になるのが、一番左端のindexですね。
これも、「基準日」がインデックスにあるほうが分析しやすいのでindexを基準日に変えておきましょう。
この場合も一行目を消したとき同じように「index_col=0」を使って、最初から読み込まないようにするのが一番簡単です。
df = pd.read_csv('jgbcm_all.csv', encoding = 'shift-jis', header=1, index_col=0)
display(df)
これを実行すると行番号が消え、だいぶすっきりしたDataFrameが出来上がりました。
しかしまだまだ、データ整理は続きます。
numpy を使ってセル内を空にする
この長期国債金利のデータですが、数字が無い部分に「-」という記号が入っています。
見えるところでは、10年から40年までに「-」が入っているのが見えますが、他の場所にも入っているんですね。
このデータを使って、各年ごとの金利の推移をグラフで書きたいのですが「-」が入っているとグラフがうまく書けないんですね。
このデータでしっかりとしたグラフを作るためには「-」を削除し、セルを空にする必要があります。
pythonで文字列を置き換える
そこで「.replace」を使って「-」を「NaN」に置き換え、ついでに元データに変更を反映させるために「inplace=True」を記述します。
こんな感じ。
df.replace(['-'], np.nan, inplace=True)
これを実行すると「-」が「NaN(Not a Number)」に置き換わりました。
データの型を変換する
データの形がここまで整ってきましたが、このままではまだ、グラフを描いたりすることができません。
その前に、グラフの型をオブジェクト型からフロートが型に変更しておく必要があります。
そこでまず「.dtypes」を使って、データの型を調べます。
print(df.dtypes)
結果は以下のようになります。
1年から3年、そして10年から40年までがオブジェクト型なのが分かります。
そこでこれらを「float」型に変換します。
変換に必要なのが「.astype」。
変換に必要なコードは以下になります。
df_f = df.astype({'1年': float, '2年': float, '3年': float, '10年': float, '15年': float, '20年': float, '25年': float, '30年': float, '40年': float})
print(df_f)
変換した結果を見てみましょう。
print(df_f.dtypes)
でもう一度データタイプを表示します。
無事に変換できました。
まとめ
CVSデータを整理することで、分析をしやすくするのですが、この過程で二つの問題がありました。
一つは、本来空であるべきセルに入っている記号「-」をどのように消去するか。
そしてもう一つは、データタイプが違うことで、プロットが作成できなくなってしまうことです。
そこで、記号「-」をNaNに一気に変換するために「.replace」メソッドを使うことで、元データをいちいち修正しなくて済みました。
データタイプが違うことについては、「astype」を使うことで、データタイプを統一。
全ての年代でプロットをすることができました。
関連記事↓↓↓


コメント