目次
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)