LoginSignup
0
0

More than 3 years have passed since last update.

csv (txt) ファイルからデータを読み込む

Posted at

目的

Python3を使って測定装置がはき出すX(波長、電圧、時間など)ーY(吸光度、電流など)がリストになったcsv(txt)ファイルからデータを読み出す。

話の前提

  • Python3/pandasが使える
  • pd.DataFrameが各行各列に名前をつけられるマトリクス形式のデータ構造であることを知っている。
  • Jupyter notebookを使っている(必須ではない)
  • 測定ファイルはdata.csv
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の列名をアップデートする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0