【Python備忘録 no.1】csvファイルの読み込みと書き込み

新年おめでとうございます in 2018

お正月ですが,今年はあまりダラダラすることなく,初日から(大晦日から?)いろいろ作業を行なっておりました.酒もあまり飲まず,ご馳走も食べ過ぎることなく・・・・でも体重が増えた(なぜ??)

やっぱ,運動しないのが原因でしょうね.運動で消費するカロリーは微々たるものでダイエットにはあまり効果がないと言われてますが,何もしないのは明らかに太っちゃうようです(汗).

で,新年早々ですが,Pythonの備忘録です.次第にPythonだけでもプログラムが書けるようになってきたので,今後はRとの対応は考えないで単純にPythonのみの備忘録として残していきたいと思います.

で,今回はcsvファイルの読み込み.方法はいろいろあるようですが,今回はPandasを使用してます.ちなみに,ファイルリストを取得する方法もついでに.これはosをインポートして使います.コンソール上から実行した様子はこちら↓

>>> import os
>>> import pandas as pd
>>> file_list = os.listdir()
>>> file_list
['sample.py', 'test.csv', 'test2.csv']
>>> f = pd.read_csv(file_list[2])
>>> f
    1   2   3   4   5
0   6   7   8   9  10
1  11  12  13  14  15
>>> f.iloc[0,:].values
array([ 6,  7,  8,  9, 10])
>>> f.iloc[1,:].values
array([11, 12, 13, 14, 15])
>>> data1 = f.iloc[0,:].values
>>> data2 = f.iloc[1,:].values
>>> data1 = [str(x) for x in data1]
>>> data1.append('class0')
>>> data2 = [str(x) for x in data2]
>>> data2.append('class1')
>>> DATA = [data1, data2]
>>> f2 = pd.DataFrame(DATA)
>>> f2.to_csv('output.csv')
>>> f = pd.read_csv('output.csv')
>>> f
   Unnamed: 0   0   1   2   3   4       5
0           0   6   7   8   9  10  class0
1           1  11  12  13  14  15  class1
>>> 

とこんな感じで.まずはファイル名のリストをos.listdir()で取得します.その中で,test2.csvを読み込んで,それぞれの行のデータの最後に’class0’と’class1’というラベルを付与し,別ファイル(output.csv)に書き出すという処理.そして,書き出したファイルを再び読み込んで,値が正しく保存されているかどうか確認してます.

test.csvから読み込んだ時点では,値はnumpy.ndarray型になっているので,これにそのまま’class0’という文字列を追加しようとしてもエラー.そこで,numpy.ndarray型を文字列のリスト型に変換し,それに’class0’や’class1’のラベルを最後に追加して保存するという処理をしてます.(もちろん,もっと他にいい方法があるかもしれません)

書き出したファイルには行番号が自動的に入ってしまいましたが,これを避ける方法もあります.あとで調べて投稿内容を修正しておきます(笑).

今日はまだお正月なので,これくらいの軽い内容で・・・