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

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

pandas.DataFrame.to_csv — pandas 0.22.0 documentation

以下の内容を説明します。

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ファイルはコチラ。

sample_pandas_normal.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, indexにTrue 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'のように、適宜設定すれば問題ありません。

区切り文字: 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
```python


デフォルトはカンマ','## 書き込みモード: mode
書き込みモードは引数modeで指定します。
デフォルトは上書きモードの'w'。追記モード'a'については後述。


## 既存のcsvファイルに追記
to_csv()メソッドの第一引数に既存のcsvファイルのパスを指定した上で引数mode='a'とすると、単純に既存ファイルの末尾にDataFrameの内容がそのまま追記される。
一旦保存したファイルに同じデータを追記する例を示す。
```python
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'(デフォルトなので省略可能)で上書き保存すれば問題ありません。

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

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

シェア

関連カテゴリー

Python pandas CSV

pandasでcsv/tsvファイル読み込み(read_csv, read_table) pandasのデータ型dtype一覧とastypeによる変換(キャスト) Pythonで正規化・標準化(リスト、NumPy配列、pandas.DataFrame) pandas.DataFrame, Seriesの行をランダムソート(シャッフル) pandas.DataFrame, Seriesの先頭・末尾の行を返すheadとtail pandasで分位数・パーセンタイルを取得するquantile pandas.DataFrame, Seriesを辞書に変換(to_dict) pandas.Seriesのmapメソッドで列の要素を置換 pandasで文字列と数値を相互変換、書式変更 Python, pandas, seabornでペアプロット図(散布図行列)を作成 pandasで欠損値NaNが含まれているか判定、個数をカウント pandas参考書『Pythonによるデータ分析入門』の注意点 pandas, Matplotlib(mpl_finance)でローソク足チャートを作成 pandasで行数、列数、全要素数(サイズ)を取得

Last Updated: 6/26/2019, 10:34:03 PM