to_csvのオプション(クォート設定)

投稿者: | 2022-02-17

目次

note.nkmk.meより

クォートを付けてCSVファイルを書き込む

  • 「1,238,529」のように3桁区切りになっている数値がある
  • これをそのままCSVファイルに入れてしまうと、項目やデータの区切りのカンマと区別がつかない
  • CSVファイルの仕様として、ヘッダーの項目を改行したものや、データの値にカンマを含める場合、それらの文字が値の一部であることがわかるように特別な扱いをすることがある
  • そのためには値をダブルクォートで囲むこと

クォート設定を行って書き出す

  • CSVファイルの扱いはアプリによって微妙な違いがある
  • Wクォート文字の扱いもExcelとその他のツールでは異なる
  • 様々なアプリと連携することを考慮して、to_csv()はいくつかのクォート設定がある

to_csvのクォート設定

  • 特別な文字・・・改行(\n)、ダブルクォート文字(”)、カンマ(,)
定数説明
csv.QUOTE_MNIMAL「特別な文字」が含まれる場合のみダブルクォート文字で囲む
( to_csv ( ) のデフォルト設定)
csv.QUOTE_ALLすべての値をダブルクォート文字で囲む
csv.QUOTE_NONNUMERIC数値以外のすべての値をダブルクォート文字で囲む
csv.QUOTE_NONEすべての値をダブルクォート文字で囲まない

出典「仕事がはかどるPython自動処理全部入り」P154

次のデータを各クォート設定を行って書き出すとした場合

import csv 
import pandas as pd

data = {
    '店舗名': ['代々木\n上原店', '表"参道店', '赤坂店', '日比谷店', '大手町店'],
    '期首在庫数': [100, 500, 800, 300, 700],
    '売上数': [50, 200, 300, 100, 200],
    '仕入数': [100, '1,000', 600, 500, '1,000'],
}
df = pd.DataFrame(data)
df

csv.QUOTE_MINIMAL

  • デフォルト設定。カンマなどを含むWクォート文字で囲む必要のある文字だけをWクォートで囲む
df.to_csv('item_stock_quote_minimal.csv', index=False,
          quoting=csv.QUOTE_MINIMAL,
          columns=['店舗名', '期首在庫数', '売上数', '仕入数'],
          encoding=encoding)

csv.QUOTE_ALL

  • すべての値をWクォート文字で囲む
df.to_csv('item_stock_quote_all.csv', index=False,
          quoting=csv.QUOTE_ALL,
          columns=['店舗名', '期首在庫数', '売上数', '仕入数'],
          encoding=encoding)

csv.QUOTE_NONNUMERIC

  • 数値以外をWクォート文字で囲む。店舗名やカンマ区切りの数値が文字列として扱われる
df.to_csv('item_stock_quote_nonnumeric.csv', index=False,
          quoting=csv.QUOTE_NONNUMERIC,
          columns=['店舗名', '期首在庫数', '売上数', '仕入数'],
          encoding=encoding)
カテゴリー: CSV