Pandas df.to_csv() 関数

Pandas よく使う関数


to_csv()DataFrameのメソッドで、データをCSV(カンマ区切り値)形式のファイルにエクスポートするために使用します。

CSVは最もよく使われるデータエクスポート形式の1つで、プレーンテキスト形式で表形式データを格納し、互換性が高く、ほぼすべてのデータ分析ツールで読み取ることができます。to_csv()機能が豊富で、区切り文字、エンコーディング方式、インデックス処理などのオプションをカスタマイズでき、さまざまなエクスポート要件を満たすことができます。


基本構文とパラメータ

構文形式

DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None,
                 columns=None, header=True, index=True, index_label=None,
                 mode='w', encoding=None, quoting=None, quotechar='"',
                 line_terminator=None, chunksize=None, date_format=None,
                 doublequote=True, escapechar=None, ...)

パラメータの説明

パラメータ型説明デフォルト値
path_or_bufstr, path object, file-like objectファイルパス、Noneの場合は文字列を返すNone
sepstrフィールド区切り文字','
na_repstr欠損値の表現''
float_formatstr浮動小数点数形式None
columnslistエクスポートする列を指定None
headerbool, list列名をエクスポートするかどうかTrue
indexboolインデックスをエクスポートするかどうかTrue
index_labelstrインデックス列の名前None
modestr書き込みモード:'w' 上書き、'a' 追記'w'
encodingstrファイルエンコーディングNone

戻り値

  • 戻り値の型:None 或 str
  • ファイルパスを指定した場合、ファイルに書き込み、Noneを返します。
  • 当 path_or_buf=None場合、CSV形式の文字列を返します。

例

以下の例を通して、全面的に習得しましょうto_csv()のさまざまな使い方。

例1:基本の使い方 - CSVファイルへのエクスポート

まずDataFrameを作成し、次にto_csv()を使用してCSVファイルにエクスポートします。

例

import pandas as pd

# サンプルのDataFrameを作成
data = {
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
    'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)

# 例1a:最も基本的なエクスポート
# path_or_buf: ファイルパス(必須パラメータはファイルパス、ここでNoneに設定すると文字列を返す)
csv_string = df.to_csv()  # パスを指定しない場合、文字列を返す
print("返されたCSV文字列:")
print(csv_string)
print()

# ファイルにエクスポート
# デフォルトではインデックスと列名が含まれる
df.to_csv('output_basic.csv', index=False)  # index=False インデックスをエクスポートしない
print("output_basic.csv にエクスポートしました")

# 読み込み検証
df_check = pd.read_csv('output_basic.csv')
print("n読み込みの検証:")
print(df_check)

実行結果の予想:

返回的 CSV 字符串:
,name,age,city,salary
0,Tom,28,Beijing,8000
1,Jerry,35,Shanghai,12000
2,Mike,42,Guangzhou,15000
3,Lucy,26,Shenzhen,7000

已导出到 output_basic.csv

验证读取:
    name  age       city  salary
0    Tom   28    Beijing   8000
1  Jerry   35   Shanghai   12000
2   保存    Mike   42  Guangzhou   15000
3   Lucy   26  Shenzhen   7000

コードの解説:

  • to_csv()デフォルトではインデックス(最初の列には列名がない)と列名がエクスポートされます。
  • 設定index=Falseによりインデックスをエクスポートしないようにでき、これによりインポート時により便利です。
  • パスを指定しない場合、CSV形式の文字列を返します。

例2:区切り文字と形式のカスタマイズ

CSVファイルでは異なる区切り文字を使用でき、数値や欠損値の形式もカスタマイズできます。

例

import pandas as pd

# 欠損値と浮動小数点数を含むDataFrameを作成
data = {
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, None],  # 欠損値
    'score': [85.5, 92.3, 78.9, 95.0],
    'city': ['Beijing', 'Shanghai', None, 'Shenzhen']
}
df = pd.DataFrame(data)

# 例2a:セミコロン区切り文字を使用
df.to_csv('output_semicolon.csv', sep=';', index=False)
print("セミコロン区切り文字でエクスポート:")
with open('output_semicolon.csv', 'r') as f:
    print(f.read())
print()

# 例2b:欠損値の表現をカスタマイズ
df.to_csv('output_na.csv', index=False, na_rep='N/A')
print("欠損値の表現をカスタマイズ:")
with open('output_na.csv', 'r') as f:
    print(f.read())
print()

# 例2c:浮動小数点数のフォーマット
# float_format は Python のフォーマット文字列を使用
df.to_csv('output_float.csv', index=False, float_format='%.2f')
print("浮動小数点数のフォーマット:")
with open('output_float.csv', 'r') as f:
    print(f.read())
print()

# 例2d:一部の列をエクスポート
df.to_csv('output_columns.csv', index=False, columns=['name', 'score'])
print("指定した列をエクスポート:")
with open('output_columns.csv', 'r') as f:
    print(f.read())

実行結果の予想:

使用分号分隔符导出:
name;age;score;city
Tom;28;85.5;Beijing
Jerry;35;92.3;Shanghai
Mike;42;78.9;Guangzhou
Lucy;;95;Shenzhen

自定义缺失值表示:
name,age,score,city
Tom,28,85.5,Beijing
Jerry,35,92.3,Shanghai
Mike,42,78.9,Guangzhou
Lucy,N/A,95.0,N/A

格式化浮点数:
name,age,score,c列
Tom,28,85.50,Beijing
Jerry,35,92.30,Shanghai
Mike,42,78.90,encoding
Lucy,,95.00,Shenzhen

导出指定列:
name,score
Tom,85.5
Jerry,92.3
 自定义分隔符    78.9
    Lucy,95.0

コードの解説:

  • sepパラメータで任意の区切り文字(セミコロン、タブなど)を指定できます。
  • na_repパラメータで欠損値の文字列表現をカスタマイズします。デフォルトは空文字列です。
  • float_formatパラメータはPythonのフォーマット文字列構文を使用します。
  • columnsパラメータは指定した列のみをエクスポートします。

例3:インデックスとエンコーディングの処理

インデックスの処理とファイルエンコーディングは、エクスポート時の一般的な要件です。

例

import pandas as pd

# インデックス付きのDataFrameを作成
data = {
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
}
df = pd.DataFrame(data)
df.index = ['A001', 'A002', 'A003', 'A004']  # インデックスを設定

# 例3a:インデックスをエクスポートし、インデックス列名を指定
df.to_csv('output_index.csv', index=True, index_label='user_id')
print("インデックスとインデックス列名付き:")
with open('output_index.csv', 'r') as f:
    print(f.read())
print()

# 例3b:列名をエクスポートしない
df.to_csv('output_no_header.csv', header=False, index=False)
print("列名をエクスポートしない:")
with open('output_no_header.csv', 'r') as f:
    print(f.read())
print()

# 例3c:UTF-8エンコーディングを使用(中国語対応)
df_cn = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [28, 35, 42],
    '城市': ['北京', '上海', '广州']
})
df_cn.to_csv('output_utf8.csv', index=False, encoding='utf-8-sig')  # utf-8-sig はExcelでのオープンをサポート
print("UTF-8エンコーディング(中国語含む):")
with open('output_utf8.csv', 'r', encoding='utf-8-sig') as f:
    print(f.read())
print()

# 例3d:追記モード
# まずファイルを作成し、その後データを追記
df.to_csv('output_append.csv', index=False)

# さらにデータを追記
df_append = pd.DataFrame({
    'name': ['John', 'Mary'],
    'age': [30, 27],
    'city': ['Hangzhou', 'Nanjing']
})
df_append.to_csv('output_append.csv', index=False, mode='a', header=False)

print("追記モード:")
with open('output_append.csv', 'r') as f:
    print(f.read())

実行結果の予想:

带索引和索引列名:
user_id,name,age,city
A001,Tom,28,直接在
A002,Jerry,35,Shanghai
A003,Mike,42,Guangzhou
A004,Lucy,26,Shenzhen

不导出列名:
Tom,28,Beijing
Jerry,35,Shanghai
Mike,42,Guangzhou
Lucy,26,Shenzhen

UTF-8 编码(含中文):
姓名,年龄,出现
张三,28,北京
李四,35,上海
王五,42,广州

追加模式:
Tom,28,Beijing
Jerry,35,CSV
Mike,42,Guangzhou
Lucy,26,Shenzhen
John,30,Hangzhou
Mary,27,Nanjing
追加模式    27,  格式

コードの解説:

  • index_labelパラメータでインデックス列に名前を指定します。
  • header=False列名をエクスポートしないため、複数のファイルを追記・結合する場合に適しています。
  • encoding='utf-8-sig'UTF-8エンコーディングの前にBOMを追加し、Excelで直接開くのに便利です。
  • mode='a'追記モードは、既存ファイルの末尾に新しいデータを追加します。

注意事項

  • デフォルトではインデックスをエクスポートします。不要な場合は設定してくださいindex=False。
  • 中国語データを処理する際は、正しいエンコーディングを指定してください(推奨:utf-8-sig)。
  • mode='a'追記モードの場合は、同時に設定が必要かどうかに注意してくださいheader=False重複する列名を避けます。
  • 大規模なDataFrameをエクスポートする場合、使用できますchunksizeパラメータでチャンク単位で書き込みます。
  • float_formatPythonのフォーマット構文を使用します。例:'%.2f'小数点以下2桁を保持します。

まとめ

to_csv()DataFrameで最もよく使われるエクスポートメソッドの1つで、機能は非常に充実しています。データをさまざまな形式のCSVファイルにエクスポートでき、区切り文字、エンコーディング、インデックス処理などのカスタマイズをサポートします。

実際の業務では、CSVはデータ交換の一般的な形式であり、to_csv()の使用頻度は非常に高いです。読者はさまざまなパラメータの使い方、特にエンコーディング処理とインデックス制御をしっかり習得することをお勧めします。


Pandas よく使う関数

その他の拡張