🐡
pythonでcsvファイルを入出力(読み込み・書き込み)
読み書き方法
pythonでcsvファイルを読む方法は、いくつかあります。
標準ライブラリのcsvモジュール
pandas
標準ライブラリのファイルの入力
読み込み方
open関数で作成したファイルオブジェクトを指定して、
csvのreaderオブジェクトを作成します。
readerオブジェクトは反復可能なため、
for文で各行のデータを取得することができます。
各行は文字列のリストになっています。
リストのためインデックスで要素を指定することも可能です。
import csv
# CSV ファイルのパス
file_path = "sample.csv"
# CSV ファイルを開く
with open(file_path, "r") as file:
# CSV ファイルを読み込む
reader = csv.reader(file)
# CSV ファイルの各行を取得
for row in reader:
print(row)
# 文字列のリストとなっているので、添字でアクセス可能
print(row[1],type(row[1]))
['日付', 'a', 'b', 'c']
a <class 'str'>
['2022/12/09', '1794', '1823', '1794']
1794 <class 'str'>
['2022/12/08', '1790', '1806', '1771']
1790 <class 'str'>
['2022/12/07', '1780', '1801', '1776']
1780 <class 'str'>
['2022/12/06', '1785', '1814', '1785']
1785 <class 'str'>
['2022/12/05', '1818', '1821', '1784']
1818 <class 'str'>
['2022/12/02', '1830', '1839', '1807']
1830 <class 'str'>
ヘッダーを読み飛ばす
ヘッダを読み飛ばすときは、nextを使用します。
import csv
# CSV ファイルのパス
file_path = "sample.csv"
# CSV ファイルを開く
with open(file_path, "r") as file:
# CSV ファイルを読み込む
reader = csv.reader(file)
# ヘッダー読み飛ばす
next(reader)
# CSV ファイルの各行を取得
for row in reader:
print(row)
['2022/12/09', '1794', '1823', '1794']
['2022/12/08', '1790', '1806', '1771']
['2022/12/07', '1780', '1801', '1776']
['2022/12/06', '1785', '1814', '1785']
['2022/12/05', '1818', '1821', '1784']
['2022/12/02', '1830', '1839', '1807']
pandasの入力
pandasを使用すると、より簡潔にcsvファイルの読み込みが可能です。
import pandas as pd
# CSV ファイルのパス
file_path = "sample.csv"
# CSV ファイルを読み込む
df = pd.read_csv(file_path)
# CSV ファイルの各行を取得
print(df)
日付 a b c
0 2022/12/09 1794 1823 1794
1 2022/12/08 1790 1806 1771
2 2022/12/07 1780 1801 1776
3 2022/12/06 1785 1814 1785
4 2022/12/05 1818 1821 1784
5 2022/12/02 1830 1839 1807
インデックス列の指定
リストのインデックスではなく、データ内でindexの列を指定することができます。
以下は、日付の列をindexにする例です。
import pandas as pd
import datetime
# CSV ファイルのパス
file_path = "sample.csv"
# CSV ファイルを読み込む
df = pd.read_csv(file_path, index_col=0)
# CSV ファイルの各行を取得
print(df)
a b c
日付
2022/12/09 1794 1823 1794
2022/12/08 1790 1806 1771
2022/12/07 1780 1801 1776
2022/12/06 1785 1814 1785
2022/12/05 1818 1821 1784
2022/12/02 1830 1839 1807
特定の列の取り出し
pandasなら特定の列も列名を指定するだけで取り出し可能です。
dataframeに対して、['列名']でアクセス可能です。
import pandas as pd
import datetime
# CSV ファイルのパス
file_path = "sample.csv"
# CSV ファイルを読み込む
df = pd.read_csv(file_path, index_col=0)
# CSV ファイルの各行を取得
print(df)
# a列の取り出しの取得
df['a']
a b c
日付
2022/12/09 1794 1823 1794
2022/12/08 1790 1806 1771
2022/12/07 1780 1801 1776
2022/12/06 1785 1814 1785
2022/12/05 1818 1821 1784
2022/12/02 1830 1839 1807
日付
2022/12/09 1794
2022/12/08 1790
2022/12/07 1780
2022/12/06 1785
2022/12/05 1818
2022/12/02 1830
Name: a, dtype: int64
Discussion