お知らせ

ただいま、シンタックスハイライターの設定を見直しております。
プログラムが見にくくなっているページがありますが、ご容赦ください。

CSVファイルをPythonで読み書きしてみる

データの活用

こんにちは。これまでのグラフを描くプログラムでは,データを直接プログラム中に書いていました。

しかし,実際には多くの場合外部ファイルにデータがあることの方が多いと思います。

そろそろ,プログラム中にデータを直接書くのではなく,ファイルから読み込むようにします。

CSVファイルを読み込んでみる

CSVライブラリを使って読み込んでみます。

こんなCSVを読み込みます。

年月日時,気温(℃)
2018/7/23 1:00,30.6
2018/7/23 2:00,29.5
2018/7/23 3:00,29.2
2018/7/23 4:00,28.9
2018/7/23 5:00,28.2
2018/7/23 6:00,28.6
2018/7/23 7:00,29.9
2018/7/23 8:00,33
2018/7/23 9:00,34
2018/7/23 10:00,36
2018/7/23 11:00,37.9
2018/7/23 12:00,38.7
2018/7/23 13:00,39.8
2018/7/23 14:00,40
2018/7/23 15:00,39.3
2018/7/23 16:00,39
2018/7/23 17:00,37.9
2018/7/23 18:00,35.9
2018/7/23 19:00,34.2
2018/7/23 20:00,32.6
2018/7/23 21:00,31.9
2018/7/23 22:00,31.6
2018/7/23 23:00,28.8
2018/7/24 0:00,27.9

このファイルを開いて,表示してみます。

import csv

with open( 'data.csv', 'r', encoding='shift_jis' ) as f:
    reader = csv.reader(f)
    #header = next( reader )

    for row in reader:
        print( row )

実行結果です。

['年月日時', '気温(℃)']
['2018/7/23 1:00', '30.6']
['2018/7/23 2:00', '29.5']
['2018/7/23 3:00', '29.2']
['2018/7/23 4:00', '28.9']
['2018/7/23 5:00', '28.2']
['2018/7/23 6:00', '28.6']
['2018/7/23 7:00', '29.9']
['2018/7/23 8:00', '33']
['2018/7/23 9:00', '34']
['2018/7/23 10:00', '36']
['2018/7/23 11:00', '37.9']
['2018/7/23 12:00', '38.7']
['2018/7/23 13:00', '39.8']
['2018/7/23 14:00', '40']
['2018/7/23 15:00', '39.3']
['2018/7/23 16:00', '39']
['2018/7/23 17:00', '37.9']
['2018/7/23 18:00', '35.9']
['2018/7/23 19:00', '34.2']
['2018/7/23 20:00', '32.6']
['2018/7/23 21:00', '31.9']
['2018/7/23 22:00', '31.6']
['2018/7/23 23:00', '28.8']
['2018/7/24 0:00', '27.9']

このように,リストとしてデータをデータを読み込むことができます。

なお,プログラム中5行目のコメントを実行するように戻すと,列名を省くことができます。

CSVファイルを書き出してみる

次に,CSVファイルにデータを書き出してみます。

import csv

with open( 'data.csv', 'r', encoding='shift_jis' ) as f:
    reader = csv.reader(f)
    #header = next( reader )

    fw = open( 'data2.csv', 'w', encoding='utf-8' )
    writer = csv.writer( fw, lineterminator='\n' )

    for row in reader:
        print( row )
        writer.writerow( row )

    fw.close()

読み込むときのプログラムとの違いは,7・8・12・14行目の4行だけです。

あえてUTF−8で書き出しているので,Excelで開くとおそらく文字化けするのではないかと思います。

CSVをPandasを使って読み込んでみる

次にPandasを使ってみます。

import  pandas

df = pandas.read_csv( 'data.csv', encoding='shift_jis' )

print( df )

#print( df['年月日時'] )

実行結果は,次になります。

               年月日時  気温(℃)
0    2018/7/23 1:00   30.6
1    2018/7/23 2:00   29.5
2    2018/7/23 3:00   29.2
3    2018/7/23 4:00   28.9
4    2018/7/23 5:00   28.2
5    2018/7/23 6:00   28.6
6    2018/7/23 7:00   29.9
7    2018/7/23 8:00   33.0
8    2018/7/23 9:00   34.0
9   2018/7/23 10:00   36.0
10  2018/7/23 11:00   37.9
11  2018/7/23 12:00   38.7
12  2018/7/23 13:00   39.8
13  2018/7/23 14:00   40.0
14  2018/7/23 15:00   39.3
15  2018/7/23 16:00   39.0
16  2018/7/23 17:00   37.9
17  2018/7/23 18:00   35.9
18  2018/7/23 19:00   34.2
19  2018/7/23 20:00   32.6
20  2018/7/23 21:00   31.9
21  2018/7/23 22:00   31.6
22  2018/7/23 23:00   28.8
23   2018/7/24 0:00   27.9

Pandasを使うと,データフレームとしてデータを読み込むことができます。

プログラムの7行目のコメントを外すと,日付日時の部分を取得できます。

Pandasを使ってCSVファイルを書き出してみる

import  pandas

df = pandas.read_csv( 'data.csv', encoding='shift_jis' )

print( df )

#print( df['年月日時'] )

df.to_csv( 'data3.csv', encoding='utf-8'  )

読み込みのプログラムと比べると,9行目が追加されただけです。

今回はこれでおしまいにします。それではまた。

この記事を書いた人
春日井 優

高校で情報科という教科を担当しています。以前は数学科も担当していました。(今でも数学科の教員免許状は有効です。)プログラムを覚えたのは、「ゲームセンターあらし」という漫画のキャラクターがBASICを解説する「こんにちはマイコン」を読んだことがきっかけでした。

Posted by kasugai