🐥

【Python】CSVファイルへの書き出しについて【備忘録】

2022/11/12に公開約3,100字

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

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

方法1:pandas

データフレーム(表形式)のデータをCSVに保存しやすい.
pandasのto_csv関数を使用.
CSVに保存されているデータをデータフレーム(表形式)で読み込むことが可能.
引数path_or_bufにCSVファイルのパス(本記事では変数output_path)を渡す.

インストール方法

terminal
pip install pandas

実際の使用例

pandas_test.py
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に保存するときに使いやすい.
(正直あまり使ってない.)

インストール方法

terminal
pip install numpy

実際の使用例

numpy_test.py
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に書き出すときによく使う脳筋コード.
個人的にはこの方法が最頻.

builtin_test.py
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の上位互換かもしれない.

module_test.py
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モジュール君,少し見直したよ.

Discussion

ログインするとコメントできます