🐡

pythonでcsvファイルを入出力(読み込み・書き込み)

2024/04/27に公開

読み書き方法

pythonでcsvファイルを読む方法は、いくつかあります。

標準ライブラリのcsvモジュール 
https://docs.python.org/ja/3/library/csv.html

pandas
https://pandas.pydata.org/docs/reference/index.html

標準ライブラリのファイルの入力

読み込み方

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