【Python】CSVファイルへの書き出したい

CSVファイルにデータを書き出す方法を備忘録としてまとめます.
使用言語はPythonです.

本記事中で例示するために使用したコードとデータは,こちらからダウンロード可能です.

方法1:pandas

データフレーム(表形式)のデータをCSVに保存しやすい方法です.
pandasのto_csv関数を使用します.
引数path_or_bufにCSVファイルのパス(本記事では変数output_path)を渡します.

インストール方法

pip install pandas

実際の使用例

import pandas as pd

input_path = 'original.csv'
data = pd.read_csv(input_path, header=None)
print(data)
#     0   1   2   3
# 0   0   1   2   3
# 1  10  11  12  13
# 2  20  21  22  23
# 3  30  31  32  33

output_path = 'test_pandas.csv'
data.to_csv(output_path, header=False)

with open(output_path) as f:
    print(f.read())

# 0,0,1,2,3
# 1,10,11,12,13
# 2,20,21,22,23
# 3,30,31,32,33

output_path_2 = 'test_pandas_2.csv'
data.to_csv(output_path_2, header=False, index=False)

with open(output_path_2) as f:
    print(f.read())
# 0,1,2,3
# 10,11,12,13
# 20,21,22,23
# 30,31,32,33

引数headerindexTrue or False

方法2:numpyの使用

numpysavetxt関数を使用します.
引数fnameにCSVファイルのパス(本記事では変数path)を渡します.
ndarrayをCSVに保存するときに使いやすい方法です.
(正直あまり使っていないです.)

インストール方法

pip install numpy

実際の使用例

import numpy as np

path = 'test_numpy.csv'
output_list = [[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]]
output_array = np.array(output_list)

np.savetxt(path, output_array)

with open(path) as f:
    print(f.read())
# 0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
# 1.000000000000000000e+01 1.100000000000000000e+01 1.200000000000000000e+01 1.300000000000000000e+01
# 2.000000000000000000e+01 2.100000000000000000e+01 2.200000000000000000e+01 2.300000000000000000e+01
# 3.000000000000000000e+01 3.100000000000000000e+01 3.200000000000000000e+01 3.300000000000000000e+01

方法3:組み込み関数と書き出しメソッド

組み込み関数open()と書き出しメソッドwrite()を組み合わせて書き出す方法です.
リストや配列をCSVに書き出すときによく使う脳筋コードになります.
個人的にはこの方法が最頻です.
ライブラリを追加でインストールする必要はありません.

path = 'test_builtin.csv'
mode = 'w'
output_list = [[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]]

with open(path, mode) as f:
    for i in range(len(output_list)):
        output = [str(index) for index in output_list[i]]
        output = ','.join(output)
        f.write(output + '\n')

with open(path) as f:
    print(f.read())
# 0,1,2,3
# 10,11,12,13
# 20,21,22,23
# 30,31,32,33

方法4:CSVモジュール

本記事をまとめる上で行った調査の過程で初めて知った方法です.
方法3の上位互換かもしれないです.

import csv

path = 'test_module.csv'
mode = 'w'
output_list = [[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]]

with open(path, mode) as f:
    writer = csv.writer(f)
    writer.writerows(output_list)

with open(path) as f:
    print(f.read())
# 0,1,2,3

# 10,11,12,13

# 20,21,22,23

# 30,31,32,33

なぜか1行空いてる...
原因については分かっていません.
今後原因を突き止められれば可能性が広がりそうですね.

まとめ

CSVファイルへのデータの書き出し方法を4種類紹介しました.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です