[Python] pandas のデータフレームで CSVとExcel読み書きする方法

[Python] pandas のデータフレームで CSVとExcel読み書きする方法

pandas のデータフレームで CSVとExcel読み書きする方法

Python ライブラリ pandas のデータフレームを使って、CSV と Excel ファイルへの読み書きを実装してみます。Excelにデータを書き込んだり、CSVからデータをデータフレームに読み込んで見たりします。

CSV入出力

read_csv() でCSVファイルをデータフレームに読み込む

pandas.read_csv — pandas 1.1.1 documentation

read_csv() を使うと、CSVファイルの中身をデータフレーム形式で読み出すことができます。

サンプルとして次のようなフォーマットのCSVファイルを用意してこれを読み込みます。

"COL-1","COL-2","COL-3"
"DATA-11","DATA-12","DATA-13"
"DATA-21","DATA-22","DATA-23"
"DATA-31","DATA-32","DATA-33"

カンマ区切りでダブルクォートで括られたフォーマットのCSVファイルです。これを読み込みます。

import pandas as pd

df = pd.read_excel('in.csv', sep=',', quotechar='"', dtype=str)
print(df)

#      COL-1    COL-2    COL-3
# 0  DATA-11  DATA-12  DATA-13
# 1  DATA-21  DATA-22  DATA-23
# 2  DATA-31  DATA-32  DATA-33

sep が区切り文字、quotechar がクォート文字の指定です。最後の dtype=str ではすべてのデータを文字列型で読み出す指定をしています。

型の指定をしていないと、pandas側でいい感じに数値型などで読みだされるようになります。場合によってはゼロ埋めが消えたりして困ることにもなるので指定しています。列ごとに個別に指定したい場合は、dtype={'COL-1': str, 'COL-2': float} みたいにすれば指定できます。

to_csv() でデータフレームをCSVファイルに書き出す

pandas.DataFrame.to_csv — pandas 1.1.1 documentation

to_csv() でデータフレームの内容をCSVファイルに書き出すことができます。

import pandas as pd
import csv

# 適当なデータフレームを用意
df = pd.DataFrame([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
])

# CSV形式で出力
df.to_csv('out.csv', index=False, sep=',', quotechar='"', quoting=csv.QUOTE_ALL)

実行すると、CSV形式でデータを in.csv のデータをそのまま out.csv に書き出してくれます。

index=False は指定しないとデータフレームが持つ列情報を出力してしまうので、これを出力しないようにするパラメータです。sep, quotechar はそれぞれ区切り文字とクォート文字の設定です。quoting=csv.QUOTE_ALL はクォートの出力を必須にする設定です。デフォルトだとクォートが無くても問題のない値の場合はクォートなしで出力されるような設定になっています。

Excel入出力

基本はCSV入出力の内容と同じです。ただし pandas で Excel の操作を行うためには xlrdxlwtopenpyxl のライブラリが必要になります。先にインストールしておきます。

$ pip install xlrd xlwt openpyxl

read_excel() でExcelファイルをデータフレームに読み込む

pandas.read_excel — pandas 1.1.1 documentation

適当なExcelファイルを用意して動きを確認してみます。

import pandas as pd

df = pd.read_excel('in.xlsx', dtype=str, sheet_name='Sheet1')
print(df)

#      COL-1    COL-2    COL-3
# 0  DATA-11  DATA-12  DATA-13
# 1  DATA-21  DATA-22  DATA-23
# 2  DATA-31  DATA-32  DATA-33

sheet_name でシート名もしくはシート番号(0-indexed)を指定してデータを読み出すことができます。読み出すシート名を配列で指定すると、複数のシートを dict 型でまとめて読み出せます。

import pandas as pd

df = pd.read_excel('in.xlsx', dtype=str, sheet_name=[0, 1])
print(df)

# {0:      COL-1    COL-2    COL-3
# 0  DATA-11  DATA-12  DATA-13
# 1  DATA-21  DATA-22  DATA-23
# 2  DATA-31  DATA-32  DATA-33, 1:    Name
# 0  シート2}

to_excel() でデータフレームをExcelファイルに書き出す

pandas.DataFrame.to_excel — pandas 1.1.1 documentation

to_excel() でデータフレームの内容をエクセルファイルに書き出すことができます。

import pandas as pd

# 適当なデータフレームを用意
df = pd.DataFrame([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
])

# Excelに書き出す
df.to_excel('out.xlsx', sheet_name='Sheet1', index=False)

その他引数の詳細等はドキュメントを見ていただければよいかと思います。

以上。

Pythonカテゴリの最新記事