Pythonでcsvファイルへの書き出し(list,numpy,pandas対応)

今回は、「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について学びたい方は、本サイトお勧めのプログラミングスクールである「侍テラコヤ」を利用してみるのも良いと思います。

詳しくは下記の記事で解説していますので、良ければそちらもご覧ください。

また、このサイトでは初心者の方向けに「プログラミングのお勧め学習法」も紹介していますので、気になった方はそちらもご覧いただけると幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

このブログを運営している人

非エンジニア職の社会人です。
業務の単純作業が苦手で、何とかしたいと思いプログラミングを習得しました。
このサイトが同じ悩みを抱える人の助けになれば良いなと考えています。

コメント

コメントする

目次