1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pandasを使ってCSVファイルを読み込んでみる。

Posted at

csvファイルを読み込みたい

 人間誰しも一度はcsvファイルを読み込みたい時があるので、今回はpythonのモジュールで、データ解析ツールの一つであるpandasを用いてcsvファイル読み込む簡単なプログラムを試作してみました。

動作の概要

 ファイル名を入力すると、同じ階層にある対応したデータファイルを読み込んでくれるようにしました。(本当はドラッグアンドドロップでちょちょいとデータ読み込みをしたかったのですがいきなりは難しそうなので……。)
 データの形としては、カンマ区切りでn行2列(nは任意)、1行目は各列のカテゴリ名となっていることを想定しており(以下の図を参照のこと)、各カテゴリ名をstringとして、1列目と2列目をそれぞれlist形式で読み込むようにしました。
csv.png

 データの読み込みにはpandasのread_csvを使用しました。こちらはカンマ区切りのcsvファイルを読み込むことができ、さらには1列目をheaderとして認識してくれる便利なものとなっています。
 ついでに、存在しないファイル名を入力してしまった場合にエラーメッセージを表示してプログラムを停止するようにもしてみました。このために、osモジュールのpath.exists()を使用しています。こちらは入力したファイルやディレクトリが存在していればTrueを返してくれます。

プログラムの実装

 さて、実際のプログラムは以下となります。応用を考えてオブジェクト指向のプログラムとしてみましたがいかがでしょうか。

csv_reader.py

import pandas as pd
import sys
import os

class csv_reader:
    #オーバーライドを前提としたread()メソッド
    def read(self,inputs):
        return 

class xy_csv_reader(csv_reader):
    def read(self,inputs):
        #インプットされた文字列をinputsに格納
        self.inputs = inputs

        #ファイルの存在を確認し、存在しなければエラーメッセージを表示しプログラムを終了。
        if not os.path.exists(self.inputs +".csv"):
            sys.exit('wrong name of csv')

        #ファイルの存在が確認できたら、pandasでデータの読み込み
        else:
            df = pd.read_csv(self.inputs +".csv")

            #ちゃんと読み込めたかデータを表示する。無くてもよい。
            print(df,"\n")
            
            #データの要素を格納し、返す
            xname = df.columns[0]
            yname = df.columns[1]
            list_x = df[xname].values
            list_y = df[yname].values
            return xname, yname ,list_x, list_y

実際に動かしてみよう

 せっかく作ったので動かしてみましょう。以下のようなテストプログラムで、先ほどのtest3.csvファイルを読み込んでみます。

test.py

from csv_reader import *

#ファイル名を入力する
csvname = input('please input name of csv file> ')

#xy_csv_readerクラスのオブジェクトを生成
csv_reader = xy_csv_reader()

#データの読み込みを実行
xname, yname, list_x, list_y = csv_reader.read(csvname)

print(xname)
print(yname)
print(list_x)
print(list_y)

 上記のテストプログラムを実行すると、コンソールに以下のように表示されるので、ここでtest3と入力してみます。

csv2.png

 すると結果は以下のように表示されました。pandasで読み込んだ結果の一行目がheaderになっていること、データが正しく読み込まれていることが分かりました。やったね。

csv3.png

 ちなみに、存在しないファイル名を入力すると以下のようになりました。こちらも、どうやら正しく動作しているようです。

csv4.png

#感想と今後
 今回は、主にpandasを使用してcsvファイルを読み込む簡単なプログラムを作製しました。オブジェクト指向も取り入れてみたので、少しはステップアップできたかなと思っています。今後は、データの読み込み方のバリエーションを作ることや、読み込んだデータを使用してデータ分析ができるプログラムに拡張などをしていきたいと思います。

1
4
4

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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?