pandas dataframe CSV出力

dataframeをcsv出力する方法
とりあえず出力するだけなら以下でOK

df.to_csv('出力先path')

細かい出力設定はをパラメータ説明を確認

サンプル

デスクトップにCSV出力をするサンプル(最も単純な設定)

import os
import pandas as pd
import numpy as np

# デスクトップパス取得
desktop_path = os.path.expanduser('~/Desktop')
# 出力ファイル名を追加して出力パスを設定
out_path = os.path.join(desktop_path,r'sample.csv')

df = pd.DataFrame([[25,'pika',88,'Electric',np.NaN,np.NaN],
                   [131,'rara',80,'Water','Ice',np.NaN],
                   [143,'gon',82,'Normal',np.NaN,np.NaN],
                   [3,'fushi',84,'Grass','Poison',np.NaN],
                   [6,'kage',84,'Fire','Flying',np.NaN],
                   [9,'kame',84,'Water',np.NaN,np.NaN]],
                  columns=['no','name','level','type1','type2','helditem'])

# 作成したdf確認
print(df)
"""
    no   name  level     type1   type2  helditem
0   25   pika     88  Electric     NaN       NaN
1  131   rara     80     Water     Ice       NaN
2  143    gon     82    Normal     NaN       NaN
3    3  fushi     84     Grass  Poison       NaN
4    6   kage     84      Fire  Flying       NaN
5    9   kame     84     Water     NaN       NaN
"""

# csv出力
df.to_csv(out_path)

実行するとデスクトップに「sample.csv」が出力される
すでに「sample.csv」という名前のファイルがある場合は上書きされる
メモ帳で開くと中身が以下の様になっていることが確認できる

,no,name,level,type1,type2,helditem
0,25,pika,88,Electric,,
1,131,rara,80,Water,Ice,
2,143,gon,82,Normal,,
3,3,fushi,84,Grass,Poison,
4,6,kage,84,Fire,Flying,
5,9,kame,84,Water,,

区切り文字をカンマ以外にする

区切り文字をカンマ以外にしたらcsvと言えるか謎ですが。。。
例えばダブルコロン(:)で区切るとしたら

df.to_csv(out_path,sep=':')

以下の様に出力される

:no:name:level:type1:type2:helditem
0:25:pika:88:Electric::
1:131:rara:80:Water:Ice:
2:143:gon:82:Normal::
3:3:fushi:84:Grass:Poison:
4:6:kage:84:Fire:Flying:
5:9:kame:84:Water::

欠損データを特定の文字として出力する

欠損データ(np.NaNなど)を[null]として出力させるとしたら

df.to_csv(out_path,na_rep='null')

以下の様に出力される

,no,name,level,type1,type2,helditem
0,25,pika,88,Electric,null,null
1,131,rara,80,Water,Ice,null
2,143,gon,82,Normal,null,null
3,3,fushi,84,Grass,Poison,null
4,6,kage,84,Fire,Flying,null
5,9,kame,84,Water,null,null

指定した列のみ出力する

「no」,「type1」,「type2」の3列のみ出力する
また、「no,type2,type1」の順番で出力をさせるとしたら

df.to_csv(out_path,columns=['no','type2','type1'])

以下の様に出力される

,no,type2,type1
0,25,,Electric
1,131,Ice,Water
2,143,,Normal
3,3,Poison,Grass
4,6,Flying,Fire
5,9,,Water

仕様

DataFrame.to_csv(path_or_buf=Nonesep=’,’na_rep=”float_format=Nonecolumns=Noneheader=Trueindex=Trueindex_label=Nonemode=’w’encoding=Nonecompression=’infer’quoting=Nonequotechar='”‘line_terminator=Nonechunksize=Nonedate_format=Nonedoublequote=Trueescapechar=Nonedecimal=’.’errors=’strict’storage_options=None)

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html

パラメータ説明

パラメータ名初期値説明
path_or_bufNone出力するパス
sep‘,’フィールドの区切り文字
na_rep欠損データの表現
float_formatNone浮動小数点数のフォーマット文字列
columnsNone書き込む列
headerTrue列(カラム)名の書き出し
indexTrue行名(インデックス)の書き出し
index_labelNoneインデックスの設定
mode‘w’書き込みモード
encodingNone出力するエンコーディング
compression‘infer’圧縮の設定
quotingNonefloat_formatを設定した場合、floatは文字列に変換される。csv.QUOTE_NONNUMERICは非数値として扱う
quotechar‘”‘フィールドを引用するための文字
line_terminatorNone改行文字の設定
chunksizeNone一度に書き込む行
date_formatNone日時のフォーマット文字列
doublequoteTrueフィールド内のquotecharの引用を設定
escapecharNonesepとquotecharをエスケープするために使用する文字の設定
decimal‘.’小数点として認識される文字
errors‘strict’エラーの時の処理方法
storage_optionsNone特定のストレージ接続するときの設定
開発環境

Windows10:22H2、python:3.10.9、pandas:1.5.3

コメント

タイトルとURLをコピーしました