note.nkmk.me

pandasでcsvファイルの書き出し・追記(to_csv)

Date: 2018-04-04 / tags: Python, pandas, CSV

panda.DataFrameまたはpandas.Seriesのデータをcsvファイルとして書き出したり既存のcsvファイルに追記したりしたい場合は、to_csv()メソッドを使う。

以下の内容を説明する。

  • to_csvメソッドでcsvファイル書き出し、保存
  • to_csv()の引数
    • 特定の列のみ書き出す: columns
    • ヘッダー、インデックスありなし: header, index
    • エンコーディング: encoding
    • 区切り文字: sep
    • 書き込みモード: mode
  • 既存のcsvファイルに追記

例として以下のデータを使用する。

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)

print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

サンプルのcsvファイルはコチラ。

以下の例はpandas.DataFrameだが、pandas.Seriesでも同様。

csvファイルの読み込みについては以下の記事を参照。

そのほかpandasでのExcelファイル、jsonファイルの読み書き(入出力)については以下の記事を参照。

スポンサーリンク

to_csvメソッドでcsvファイル書き出し、保存

panda.DataFrameまたはpandas.Seriesのメソッドとしてto_csv()が用意されている。

第一引数にパスを指定すると、csvファイルが出力される。

df.to_csv('data/dst/to_csv_out.csv')
name,age,state,point
Alice,24,NY,64
Bob,42,CA,92
Charlie,18,CA,70
Dave,68,TX,70
Ellen,24,CA,88
Frank,30,NY,57

to_csv()の引数

to_csv()メソッドの主な引数をいくつか紹介する。

特定の列のみ書き出す: columns

特定の列だけ書き出したい場合は、引数columnsに列名のリストを指定する。一列だけでもリストで指定する。

df.to_csv('data/dst/to_csv_out_columns.csv', columns=['age'])
name,age
Alice,24
Bob,42
Charlie,18
Dave,68
Ellen,24
Frank,30

デフォルトはNoneですべての列が出力される。

ヘッダー、インデックスありなし: header, index

ヘッダー(列名)、インデックス(行名)のありなしは引数header, indexTrue or Falseで指定する。

df.to_csv('data/dst/to_csv_out_header_index.csv', header=False, index=False)
24,NY,64
42,CA,92
18,CA,70
68,TX,70
24,CA,88
30,NY,57

デフォルトはどちらもTrue

エンコーディング: encoding

出力ファイルのエンコーディングは引数encodingで指定する。

Python3の場合、デフォルトはutf-8

Windowsで日本語を扱う場合などはencoding='cp932'のように、適宜設定すればOK。

区切り文字: sep

区切り文字は引数sepで指定する。

タブ文字\tで区切ったtsvファイルとして保存したい場合は以下のように設定する。

df.to_csv('data/dst/to_csv_out.tsv', sep='\t')
name    age state   point
Alice   24  NY  64
Bob 42  CA  92
Charlie 18  CA  70
Dave    68  TX  70
Ellen   24  CA  88
Frank   30  NY  57

デフォルトはカンマ','

書き込みモード: mode

書き込みモードは引数modeで指定する。

デフォルトは上書きモードの'w'。追記モード'a'については後述。

既存のcsvファイルに追記

to_csv()メソッドの第一引数に既存のcsvファイルのパスを指定した上で引数mode='a'とすると、単純に既存ファイルの末尾にDataFrameの内容がそのまま追記される。

一旦保存したファイルに同じデータを追記する例を示す。

df.to_csv('data/dst/to_csv_out_a.csv')
df.to_csv('data/dst/to_csv_out_a.csv', mode='a', header=False)
name,age,state,point
Alice,24,NY,64
Bob,42,CA,92
Charlie,18,CA,70
Dave,68,TX,70
Ellen,24,CA,88
Frank,30,NY,57
Alice,24,NY,64
Bob,42,CA,92
Charlie,18,CA,70
Dave,68,TX,70
Ellen,24,CA,88
Frank,30,NY,57

既存のcsvファイルからデータを読み込み、コード上の処理により行や列を追加・更新したDataFrameを同名ファイルに書き出す場合は、mode='w'(デフォルトなので省略可能)で上書き保存すればOK。

df.to_csv('data/dst/to_csv_out_a_new_column.csv')

df = pd.read_csv('data/dst/to_csv_out_a_new_column.csv', index_col=0)

print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

df['new_col'] = 'new data'

print(df)
#          age state  point   new_col
# name                               
# Alice     24    NY     64  new data
# Bob       42    CA     92  new data
# Charlie   18    CA     70  new data
# Dave      68    TX     70  new data
# Ellen     24    CA     88  new data
# Frank     30    NY     57  new data

df.to_csv('data/dst/to_csv_out_a_new_column.csv')
name,age,state,point,new_col
Alice,24,NY,64,new data
Bob,42,CA,92,new data
Charlie,18,CA,70,new data
Dave,68,TX,70,new data
Ellen,24,CA,88,new data
Frank,30,NY,57,new data

なお、特別な理由がない限り、元のデータファイルに上書きするよりは別ファイルとして保存するほうが無難。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事