今回は、「csvファイル」へのデータの書き出しについて解説していこうと思います。csvファイルとは何か?については、本サイトの「Pythonでcsvファイルを読み込んでみよう」で解説しているので、そちらをご覧ください。
Pythonで整理したデータって、「csvファイル」で読み込みや出力をすることが多いよね!
でも、Pyhonのデータって「list」とか「numpy」とかで形式が違って紛らわしいんだよね…。
よし、じゃあ今回はどのデータでも出力に迷わないように、それぞれの出力方法について解説するね!
1. listデータのcsvへの出力
まずは、データがlist形式の場合の書き出し方法について解説します。
listをcsvに書き出す場合は、「csv」というライブラリの「writer」オブジェクトを使用します。
使用方法は簡単で、下のように使います。
#まず、下のようにwirteオブジェクトを宣言
write = csv.writer(出力ファイル)
#データが1次元の場合の書き出し
write.writerow(データ)
#データが2次元の場合の書き出し
write.writerows(データ)
#ただし、下のようにいっぺんに書くこともできます
csv.writer(出力ファイル).writerow(データ)
では、実際に使用例を下で見てみましょう。
1.1. 1次元データの出力
まずは、下のコードを実行してみてください。
import csv
f = open('out.csv', 'w')
data = ['あいうえお','12345']
writer = csv.writer(f)
writer.writerow(data)
f.close()
上のコードを実行すると、下の画像のような「out.csv」というcsvファイルができます。
1次元配列は特に注意することもないので、上で解説した使い方を使えば問題ありません。
1.2. 2次元データの出力(空行削除解説付き)
次に、2次元データの書き出しについて解説します。まずは、下のコードを実行してみましょう。
import csv
f = open('out2.csv', 'w')
data = [['あいうえお','12345'],['かきくけこ','678910']]
writer = csv.writer(f)
writer.writerows(data)
f.close()
すると、出力はできるのですが、下のように空の行が入ってしまいます。
そこで、それを防ぐためには、ファイルを開く際に「newline=”」を用いることで、空の行が挿入されるのを防ぐことができます。
※空の行は、改行コードと呼ばれるものの処理の仕方により挿入されてしまうため、「newline=”」と改行コードを指定してやることで防ぐことができます。
import csv
f = open('out2.csv', 'w', newline='')
data = [['あいうえお','12345'],['かきくけこ','678910']]
writer = csv.writer(f)
writer.writerows(data)
f.close()
上のように書くことで、2次元配列も出力することができました。
- listの書き出しは「csv」ライブラリの「writer」オブジェクトを使用
- listが1次元の場合、writerowメソッドを使用
- listが2次元の場合、writerowsメソッドを使用
- 2次元を書き出す場合は、ファイルを開く際に「newline=”」を用いて空行が挿入されないようにする
2. numpyデータのcsvへの出力
次に、numpyデータのcsvへの書き出しについて解説します。
numpyをcsvへ書き出す場合は、テキストへの書き出しと同様に「savetxt」を使用します。
ただし、csvは「カンマ区切り」なので、区切り文字を「,」に指定して保存します。区切り文字の指定には「delimiter」を使用します。
では、実際のコードを確認してみましょう。
import numpy as np
data = np.arange(9).reshape(3,3)
np.savetxt("outnp.csv", data, delimiter=",")
すると、上のようにcsv形式で保存することができます。
使い方は、「numpy.savetxt(ファイル名, データ, delimiter=”,”)」のように使います。
ただし、デフォルトでは文字コードが「”%.18e”」になっているため、気になる方は下のように「fmt」を使ってフォーマットを指定しましょう。
#整数の場合
np.savetxt("outnp.csv", data, delimiter=",", fmt="%d")
#実数(少数以下5桁)の場合
np.savetxt("outnp.csv", data, delimiter=",", fmt="%.5f")
他にもいろいろな文字フォーマットがあります。よく使うフォーマットは下のようなものです。
記号 | 意味 | 使用方法 |
s | 文字 | 文字の場合に使用 |
d | 整数 | 整数の場合に使用 |
.数字f | 実数(少数点表記) | .3f のように小数点以下の桁数を入力 |
.数字e | 指数表記 | .3e のように小数点以下の桁数を入力 |
また、文字に関するformat文の使い方を下の記事にまとめていますので、良ければそちらもご覧ください。
- numpyの書き出しは、テキストへの書き出しと同様に「savetxt」を使用
- 「delimiter」を使用し区切り文字を「,」に指定
- 文字コードは「fmt」を使ってフォーマットを指定
3. pandasデータのcsvへの出力
最後に、pnadasで作成したデータフレームをcsvへ書き出す方法について解説します。
pandasには、「to_csv」というcsvへ書き出すためのメソッドが用意されているので、それを使用します。
使用方法は、「df.to_csv(ファイル名)」という形で使います。では、実際にコードを確認してみましょう。
import pandas as pd
df = pd.DataFrame({"名前":["太郎", "五郎", "花子"],
"身長":[169, 175, 160],
"成績":[90, 70, 85]})
df = df.set_index('名前')
df.to_csv("output_pd.csv", encoding="shift_jis")
すると、下のようにcsvファイルへ書き出すことができました。
※日本語を使う場合は、「encoding=”shift_jis”」を使わないと文字化けしてしまいます。
また余談ですが、csv以外へ書き出したい場合は「sep」を使うことで区切り文字を指定することができます。
import pandas as pd
df = pd.DataFrame({"名前":["太郎", "五郎", "花子"],
"身長":[169, 175, 160],
"成績":[90, 70, 85]})
df = df.set_index('名前')
df.to_csv("output_pd.txt", encoding="shift_jis", sep="\t")
すると、下のようにテキスト形式でも保存できます。
※上のコードでは、区切り文字を「タブ(Tab)」に指定しています。
- pandasの書き出しは「to_csv」というcsvへ書き出すメソッドを使用
- 日本語を使う場合は、「encoding=”shift_jis”」を使わないと文字化けする
- csv以外へ書き出したい場合は「sep」を使うことで区切り文字を指定
4. まとめ
今回は、pythonのデータをcsvへ書き出す方法について解説しました。テキストファイルへの書き出しや、もう少し丁寧な解説が見たい方は、本サイトの「Pythonでテキストファイル・csvファイルへの書き出しをしてみよう(write)」で解説しておりますので、そちらをご覧ください。
このサイトで皆さんの疑問が少しでも解決出来たら幸いです。
もっと詳しくPythonについて学びたい方は、本サイトお勧めのプログラミングスクールである「侍テラコヤ」を利用してみるのも良いと思います。
詳しくは下記の記事で解説していますので、良ければそちらもご覧ください。
また、このサイトでは初心者の方向けに「プログラミングのお勧め学習法」も紹介していますので、気になった方はそちらもご覧いただけると幸いです。
コメント