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

今回は、「csvファイル」へのデータの書き出しについて解説していこうと思います。csvファイルとは何か?については、本サイトの「Pythonでcsvファイルを読み込んでみよう」で解説しているので、そちらをご覧ください。

目次

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")

他にもいろいろな文字フォーマットがあるので、他のフォーマットを使いたい方は調べて使ってみてください。

  • 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をコピーしました!

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

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

コメント

コメント一覧 (2件)

  • ‘tuple’ object has no attribute ‘to_csv’だって

    このエラー吐かれる人多いんじゃない?

    • ご質問いただいているエラーについて、
      ご質問者様は、おそらくタプル(()で囲われたデータ)を
      to_csvでcsv出力しようとされたのだと思いますが、
      to_csvはpandasのDataFrameのメソッドですので、使用できません。

      タプルの場合はこのページ上部の
      「1. listデータのcsvへの書き出し」の方法を使用していただければ出力することが出来ます。

コメントする

目次