CSVファイルの作成と読み込み
CSV形式のファイルは、データをカンマ,で区切った形式のものである(岡本、2019、pp.33-35)。作成は、Excelなどの表計算ソフトで簡単にできる。読み込みも、Pandaで簡単にできる。
ExcelでCSV形式のファイルを作成する例を示すが、他の表計算ソフトの場合も同様である
新規にデータを図1のように用意したとする。
図1
作成したデータをCSVファイルとして保存するために、「名前を付けて保存」のページにおいて「参照」を選ぶ(図2)。
図2
「名前を付けて保存」ダイアログボックスが提示される(図3)。
図3
「ファイルの種類」において、「CSV(カンマ区切り(*.csv))」を選ぶ。
図4
ファイル名をファイル拡張子を「.csv」として付ける。「保存」ボタンをクリックする。
「〜ブックの一部の機能が失われる可能性があります。この形式でブックを保存しますか?」のメッセージボックスが表示される(図5)。
図5
CSV形式のファイルの場合、データ値そのものだけが保存されるので、セルの幅とか「ブックの一部の機能」は保存するデータとしては関係ないので、「はい」を選ぶ。
図4で設定したファイル名「Sample.csv」のデータとして表示される(図6)。
図6
Excelを終了するときに、図7のようなメッセージボックスが表示されたときは、「保存」を選んでおけばよい。
図7
さらに、図8のようなメッセージボックスが表示されたら、「はい」を選ぶ。
図8
保存したCSVファイルを、テキストエディタで開くと、図9のようになっている。
図9
設定した値が、カンマで区切って並べられていることがわかる。
CSV形式のファイルは、表計算ソフトを用いなくても、データをカンマで区切って並べてエディタで直接作成することもできる。
CSVファイルの読み込みは、リスト1のスクリプト例のように簡単にできる。
上で作成したCSVファイルSample.csvの読み込みは、次のコードで行っている。読み込むCSVファイルは、スクリプトと同じフォルダ内に置かれているものとする。
df = pd.read_csv('Sample.csv', encoding='shift-jis')
パラメータencoding='shift-jis'は、日本語を含むデータの読み込みを行うためのものである。
dfの表す読み込まれた内容は、PandasのDataFrameオブジェクトとして納められている。
次のprint文
print('df =\n', df)
で出力すると、以下の出力を得る。
df =
項目A 項目B 項目C
0
1.0 5.0 3
1
2.0 6.0 4
2
3.0 NaN 5
3
NaN 7.0 6
各変数の内容は、キーを指定して、valuesでnd.array型に変換することで、配列の値として利用することができる。
X = df['項目A'].values
print('A =\n', X)
Y = df['項目B'].values
print('B =\n', Y)
Z = df['項目C'].values
print('C =\n', Z)
print文による出力は、以下の通りである。
A =
[ 1.
2. 3. nan]
B =
[ 5.
6. nan 7.]
C =
[3 4 5 6]
図6で、空白のセルに対応する箇所は「nan」となっている。
この「nan」を削除した配列は、次のコードで得ることができる。
X1 = X[np.isnan(X)==False]
Y1 = Y[np.isnan(Y)==False]
Z1 = Z[np.isnan(Z)==False]
X1、Y1、Z1の内容を、次のコード
print('X1 =\n', X1)
print('Y1 =\n', Y1)
print('Z1 =\n', Z1)
で確認している。
出力は、以下のようである。
X1 =
[1. 2. 3.]
Y1 =
[5. 6. 7.]
Z1 =
[3 4 5 6]
「nan」が削除されていることが分かる。
Pandas.read_csvで読み込んだデータを、変数単位ではなく全体をまとめて読み込みndattay型のデータとして得るときは、次のコードで行えばよい。
Data = df.values
print('Data =\n', Data)
このとき、printによる出力は以下のようである。
Data =
[[ 1. 5.
3.]
[ 2.
6. 4.]
[ 3. nan 5.]
[nan
7. 6.]]
変数名は、次のコードで得ることができる。
Var_names = df.keys().values
print('Var_names =\n', Var_names)
printによる出力は、以下のようである。
Var_names =
['項目A' '項目B' '項目C']
import pandas as pd
import numpy as np
df = pd.read_csv('Sample.csv',
encoding='shift-jis') # PandasのオブジェクトDataFrameとして取得
print('df =\n', df)
print('Keys =\n', df.keys().values)
X = df['項目A'].values
print('A =\n', X)
Y = df['項目B'].values
print('B =\n', Y)
Z = df['項目C'].values
print('C =\n', Z)
X1 = X[np.isnan(X)==False]
Y1 = Y[np.isnan(Y)==False]
Z1 = Z[np.isnan(Z)==False]
print('X1 =\n', X1)
print('Y1 =\n', Y1)
print('Z1 =\n', Z1)
Data = df.values
print('Data =\n', Data)
Var_names = df.keys().values
print('Var_names =\n', Var_names)