さつまろぐ

CAEとかプログラムとか、出来たことの記録など、誰かのお役に立てれば幸い。

Pythonで遊ぶ pandasを使ったcsvファイルの読み取り

csvファイルからデータを読み取り、加工・分析・可視化をやりたい。 まずはデータの読み取りから。

前提

下記のような表を作成。獲得点数.csvというファイル名で保存

これに対し次の操作を行いたい。

  • ファイルからデータの読み込み。
  • 3行目までは説明なので、4行目から読み込む。
  • 経過日数は月日に直す。
  • 最終的にグラフにしたい。

順番にやっていく。

データの読み込み

pandas を使うので、まずはPandasをインポート。

>>>import pandas as pd

csvファイルの読み込みには、read_csv( )を使う。( )にはファイル名を指定し、読み込んだデータを dataに代入する。 確認のためprint(data)で読み込んだ内容を確認する。 その結果、下記となる。

>>> data = pd.read_csv("獲得点数.csv")
>>> print(data)
        #このファイルには4名の、日ごとの獲得点数を記録。 Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4
0  #経過日数は、2020年4月1日を基準とした経過日数を示す。        NaN        NaN        NaN        NaN
1                             NaN        NaN        NaN        NaN        NaN
2                            経過日数         田中         山田         鈴木         佐藤
3                               0          6         71        NaN          6
4                               1         74         27        NaN         60
5                               2         58         50        NaN         21
6                               3         64          1         55         59
7                               4         38         88         71         28
8                               5         29         10         60         84

とりあえず読み込みには成功。しかし1~3行目はコメントなので、ここは飛ばして読み込みたい。

ファイルの途中から読み込み

ファイルのヘッダーを飛ばして読み込む場合は、read_csv( )で、ファイル名の後にheader = ??を指定すればよい。 ここでは3行飛ばすので、header = 3を指定する。

>>> data = pd.read_csv("獲得点数.csv",header=3)
>>> print(data)
   経過日数  田中  山田    鈴木  佐藤
0     0   6  71   NaN   6
1     1  74  27   NaN  60
2     2  58  50   NaN  21
3     3  64   1  55.0  59
4     4  38  88  71.0  28
5     5  29  10  60.0  84

無事、ヘッダー部分を省略し読み込むことができた。しかし今度は、print(data)で表示した際の、項目名とデータの表示がずれている。 分析自体には問題はないが、見た目が気持ち悪いので修正する。

テーブル表示幅の修正

表示のずれは日本語を使った際に生じる。これを回避するため、Pandasで下記のオプションを設定。

>>>pd.set_option('display.unicode.east_asian_width', True)

東アジアの文字列にする設定のようだ。結果は下記となる。

>>> pd.set_option('display.unicode.east_asian_width', True)
>>> print(data)
   経過日数  田中  山田  鈴木  佐藤
0         0     6    71   NaN     6
1         1    74    27   NaN    60
2         2    58    50   NaN    21
3         3    64     1  55.0    59
4         4    38    88  71.0    28
5         5    29    10  60.0    84

いい感じに表示できた。

このデータを使って加工や可視化をやってみる。

広告