目標
Pythonを用いて、「csvファイル」に記載しているデータを読み込んで変数に格納する。
csvファイルの用意
csvファイルは自分がプログラムに組み込みたいデータを用いると良いでしょう。
僕は、http://skomo.o.oo7.jp/f27/hp27_47.htmから比熱のデータを持ってきました。
ですので、今回格納したいデータは、「気体の比熱.csv」とします。
この「csvファイル」をエクセルで開くと表になっていますが、テキストで開くと、
このようにカンマ区切りでリストみたいになっています。
Pythonでcsvファイルを読み込む方法
Pythonで「csvファイル」を読み込む方法は複数あります。
numpyの中のgenfromtxtを使う
まずは、「numpyの中のgenfromtxt」という方法があります。
1 2 3 4 5 | import numpy as np Cv=np.genfromtxt('./03_data/気体の比熱表.csv',delimiter=',',dtype=float,skip_header=2) print(Cv) |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [[ 0.00000000e+00 1.00800000e+03 7.22400000e+02 1.39900000e+00] [ 1.00000000e+02 1.01220000e+03 7.22400000e+02 1.39700000e+00] [ 2.00000000e+02 1.02900000e+03 7.39200000e+02 1.38900000e+00] [ 3.00000000e+02 1.05000000e+03 7.60200000e+02 1.37800000e+00] [ 4.00000000e+02 1.07520000e+03 7.85400000e+02 1.36700000e+00] [ 5.00000000e+02 1.09620000e+03 8.10600000e+02 1.35600000e+00] [ 6.00000000e+02 1.12140000e+03 8.31600000e+02 1.34600000e+00] [ 7.00000000e+02 1.14240000e+03 8.52600000e+02 1.33800000e+00] [ 8.00000000e+02 1.15920000e+03 8.69400000e+02 1.33000000e+00] [ 9.00000000e+02 1.17600000e+03 8.86200000e+02 1.32400000e+00] [ 1.00000000e+03 1.18860000e+03 9.03000000e+02 1.31900000e+00] [ 1.10000000e+03 1.20120000e+03 9.15600000e+02 1.31500000e+00] [ 1.20000000e+03 1.21380000e+03 9.24000000e+02 1.31100000e+00] [ 1.30000000e+03 1.22220000e+03 9.36600000e+02 1.30800000e+00] [ 1.40000000e+03 1.23060000e+03 9.45000000e+02 1.30500000e+00] [ 1.50000000e+03 1.23900000e+03 9.53400000e+02 1.30200000e+00] [ 1.60000000e+03 1.24740000e+03 9.57600000e+02 1.30000000e+00] [ 1.70000000e+03 1.25580000e+03 9.66000000e+02 1.29800000e+00] [ 1.80000000e+03 1.26000000e+03 9.70200000e+02 1.29600000e+00] [ 1.90000000e+03 1.26420000e+03 9.78600000e+02 1.29400000e+00] [ 2.00000000e+03 1.27260000e+03 9.82800000e+02 1.29300000e+00] [ 2.10000000e+03 1.27680000e+03 9.87000000e+02 1.29100000e+00] [ 2.20000000e+03 1.28100000e+03 9.91200000e+02 1.29000000e+00] [ 2.30000000e+03 1.28520000e+03 9.95400000e+02 1.28900000e+00] [ 2.40000000e+03 1.28940000e+03 9.99600000e+02 1.28800000e+00] [ 2.50000000e+03 1.29360000e+03 1.00380000e+03 1.28600000e+00] [ 2.60000000e+03 1.29780000e+03 1.00800000e+03 1.28600000e+00] [ 2.70000000e+03 1.29780000e+03 1.01220000e+03 1.28500000e+00] [ 2.80000000e+03 1.30200000e+03 1.01640000e+03 1.28300000e+00] [ 2.90000000e+03 1.30620000e+03 1.01640000e+03 1.28300000e+00] [ 3.00000000e+03 1.30620000e+03 1.02060000e+03 1.28200000e+00]] |
numpyの中のloadtxtを使う
「numpyの中のloadtxt」という方法でも読み込むことができます。
1 2 3 4 5 | import numpy as np Cv=np.loadtxt('./03_data/気体の比熱表 .txt',delimiter=',',skiprows=2) print(Cv) |
結果はgenfromtxtのときと同じ結果になります。
csvモジュールを使う
csvというモジュールをインポートしてファイルの読み込みを行います。
1 2 3 4 5 6 7 8 | import csv #csvモジュールをインポートする file = open('./03_data/気体の比熱表.csv',"r") dataReader = csv.reader(file) for row in dataReader: print(row) |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ['温度', '空気', '空気', '空気'] ['℃', 'cp定圧比熱', 'cv定容比熱', 'k比熱比'] ['0', '1008', '722.4', '1.399'] ['100', '1012.2', '722.4', '1.397'] ['200', '1029', '739.2', '1.389'] ['300', '1050', '760.2', '1.378'] ['400', '1075.2', '785.4', '1.367'] ['500', '1096.2', '810.6', '1.356'] ['600', '1121.4', '831.6', '1.346'] ['700', '1142.4', '852.6', '1.338'] ['800', '1159.2', '869.4', '1.33'] ['900', '1176', '886.2', '1.324'] ['1000', '1188.6', '903', '1.319'] ['1100', '1201.2', '915.6', '1.315'] ['1200', '1213.8', '924', '1.311'] ['1300', '1222.2', '936.6', '1.308'] ['1400', '1230.6', '945', '1.305'] ['1500', '1239', '953.4', '1.302'] ['1600', '1247.4', '957.6', '1.3'] ['1700', '1255.8', '966', '1.298'] ['1800', '1260', '970.2', '1.296'] ['1900', '1264.2', '978.6', '1.294'] ['2000', '1272.6', '982.8', '1.293'] ['2100', '1276.8', '987', '1.291'] ['2200', '1281', '991.2', '1.29'] ['2300', '1285.2', '995.4', '1.289'] ['2400', '1289.4', '999.6', '1.288'] ['2500', '1293.6', '1003.8', '1.286'] ['2600', '1297.8', '1008', '1.286'] ['2700', '1297.8', '1012.2', '1.285'] ['2800', '1302', '1016.4', '1.283'] ['2900', '1306.2', '1016.4', '1.283'] ['3000', '1306.2', '1020.6', '1.282'] |
pandasを使用する方法
pandasでcsvファイルを読み込むときは、pandas.read_csv(“ファイル名”)を使います。
ただpandasはファイル名が日本語であったり、ファイルの中に日本語が含まれている場合はエラーが出ます。
1 2 3 4 5 6 | import pandas as pd Cv=pd.read_csv('./03_data/気体の比熱表.csv') print(Cv) |
実行結果
1 2 3 4 5 6 7 | OSError Traceback (most recent call last) <ipython-input-40-6ff95ca80edb> in <module>() 2 3 ----> 4 Cv=pd.read_csv('./03_data/気体の比熱表.csv') 5 6 print(Cv) |
↑このようにエラーが出てしまいます。
正しく動作するために、
- ファイル名を半角英数にする。
- ファイルの中に日本語が含まれるのでオプションで「encoding=”shift_jis”」をつける
1 2 3 4 5 | import pandas as pd Cv=pd.read_csv('./03_data/data.csv',encoding="shift_jis") print(Cv) |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 温度 空気 空気.1 空気.2 0 ℃ cp定圧比熱 cv定容比熱 k比熱比 1 0 1008 722.4 1.399 2 100 1012.2 722.4 1.397 3 200 1029 739.2 1.389 4 300 1050 760.2 1.378 5 400 1075.2 785.4 1.367 6 500 1096.2 810.6 1.356 7 600 1121.4 831.6 1.346 8 700 1142.4 852.6 1.338 9 800 1159.2 869.4 1.33 10 900 1176 886.2 1.324 11 1000 1188.6 903 1.319 12 1100 1201.2 915.6 1.315 13 1200 1213.8 924 1.311 14 1300 1222.2 936.6 1.308 15 1400 1230.6 945 1.305 16 1500 1239 953.4 1.302 17 1600 1247.4 957.6 1.3 18 1700 1255.8 966 1.298 19 1800 1260 970.2 1.296 20 1900 1264.2 978.6 1.294 21 2000 1272.6 982.8 1.293 22 2100 1276.8 987 1.291 23 2200 1281 991.2 1.29 24 2300 1285.2 995.4 1.289 25 2400 1289.4 999.6 1.288 26 2500 1293.6 1003.8 1.286 27 2600 1297.8 1008 1.286 28 2700 1297.8 1012.2 1.285 29 2800 1302 1016.4 1.283 30 2900 1306.2 1016.4 1.283 31 3000 1306.2 1020.6 1.282 |