目的
Python3を使って測定装置がはき出すX(波長、電圧、時間など)ーY(吸光度、電流など)がリストになったcsv(txt)ファイルからデータを読み出す。
話の前提
- Python3/pandasが使える
- pd.DataFrameが各行各列に名前をつけられるマトリクス形式のデータ構造であることを知っている。
- Jupyter notebookを使っている(必須ではない)
- 測定ファイルはdata.csv
日時:2019/1/1
開始波長(nm):300
終了波長(nm):800
>>>>>>>
波長, 吸光度
300, 0.00000
310, 0.00010
320, 0.00100
>>>>>>>
多くの測定データファイルは上記のようにヘッダー部分(日時や装置名などのメタデータが書かれた部分)と測定結果をリストにしているメイン部分に分かれている。今は、メインのデータをPython3で取り込み、その後の加工に使いたい。
方法
入力
import pandas as pd
f = 'data.csv'
df = pd.read_csv(f, sep=',', skiprows=6, skip_footer=1, header=None)
df.columns = ['WL', 'ABS']
print(df)
出力
WL ABS
0 300 0.0000
1 310 0.0001
2 320 0.0010
解説
pandasのもつread_csv
という関数を使う。この関数には多くのの引数があり、柔軟にCSVファイルを読み込むことができる(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)。
今回明示的に指定した引数は以下の通り。
-
ファイル名
f
:読み出すファイルの名前。一番最初の引数とする。 -
sep
:separatorの略で、データ間を切り分けるための目印となる文字種を指定できる。CSVはその名の通り、Comma Separated Valuesの略なので、今回のケースではカンマを指定する。実は、この引数はそもそもsep=','
、とカンマが指定されており、このケースでは明示的にこの値を指定する必要はない。ただし、多くの測定器の出力ファイルがtsv (tab separated values)の形式であるので、その場合はsep='¥t'
と指定する。 -
skiprows
:頭から何行目までを飛ばして読み込みを開始するかを指定する。今回は波長, 吸光度
まで不要だったので6とした。 -
skip_footer
:ファイル末尾に不要な行があるときに指定する。今回は最後の>>>>>>>
の1行分が不要なので1とした。 -
header
:各列名を指定する行番号をskiprows
で飛ばした後の0行目から指定する。今回はファイル中に波長, 吸光度
という行があるが、後ほど自分で指定したかったので、header=None
と指定して、どの行も列名として読み込まないようにした。
最後にdf.columns = ['WL', 'ABS']
でDataFrameの列名をアップデートする。