PandasでスタイリッシュなExcelファイル出力:見やすく美しいデータ分析を実現

2024-04-07

PandasでスタイリッシュなExcelファイルを出力しよう!

準備

まず、必要なライブラリをインポートしましょう。

import pandas as pd
from pandas.io.formats.style import Styler

例題:売上データの分析

以下の売上データを使って、スタイリッシュなExcelファイルを作成してみましょう。

# データフレーム作成
df = pd.DataFrame({
    "商品名": ["A", "B", "C", "D", "E"],
    "売上": [100, 200, 300, 400, 500],
    "利益率": [0.1, 0.2, 0.3, 0.4, 0.5]
})

# 列の書式設定
df.style.set_properties(**{
    "text-align": "center",  # 文字配置を中央揃えに
    "font-size": "12pt",  # フォントサイズを12ptに
})

# 売上列の書式設定
df.style.set_column_style("売上", **{
    "color": "green",  # 文字色を緑に
    "background-color": "yellow",  # 背景色を黄色に
})

# 利益率列の書式設定
df.style.set_column_style("利益率", **{
    "number-format": "0.0%",  # 数値形式をパーセンテージに
    "text-align": "right",  # 文字配置を右揃えに
})

# 条件付き書式設定:売上200以上のセルを赤色に
df.style.applymap(lambda x: "color: red" if x["売上"] >= 200 else "", subset=["売上"])

# Excelファイル出力
df.to_excel("売上データ.xlsx", engine="openpyxl")

ポイント

  • set_properties:全体的な書式設定
  • set_column_style:特定の列の書式設定
  • applymap:条件付き書式設定
  • engine="openpyxl":Excelファイル出力時のエンジン指定(xlsx形式推奨)

その他の機能

  • Stylerには他にも様々な機能があります。詳細は公式ドキュメントを参照してください。
  • 条件付き書式設定は、より複雑な条件を設定することも可能です。
  • 図やグラフを挿入することもできます。

pandas.io.formats.style.Styler.to_excelを使うことで、データ分析結果を分かりやすく伝えられるスタイリッシュなExcelファイルを作成できます。



PandasでスタイリッシュなExcelファイル出力:サンプルコード集

# データフレーム作成
df = pd.DataFrame({
    "商品名": ["A", "B", "C", "D", "E"],
    "売上": [100, 200, 300, 400, 500],
    "利益率": [0.1, 0.2, 0.3, 0.4, 0.5]
})

# 全体的な書式設定
df.style.set_properties(**{
    "text-align": "center",  # 文字配置を中央揃えに
    "font-size": "12pt",  # フォントサイズを12ptに
})

# 売上列の書式設定
df.style.set_column_style("売上", **{
    "color": "green",  # 文字色を緑に
    "background-color": "yellow",  # 背景色を黄色に
})

# 利益率列の書式設定
df.style.set_column_style("利益率", **{
    "number-format": "0.0%",  # 数値形式をパーセンテージに
    "text-align": "right",  # 文字配置を右揃えに
})

# 条件付き書式設定:売上200以上のセルを赤色に
df.style.applymap(lambda x: "color: red" if x["売上"] >= 200 else "", subset=["売上"])

# Excelファイル出力
df.to_excel("売上データ.xlsx", engine="openpyxl")

従業員情報の管理

# データフレーム作成
df = pd.DataFrame({
    "名前": ["山田太郎", "佐藤花子", "田中一郎"],
    "部署": ["営業", "人事", "開発"],
    "年齢": [30, 25, 40],
    "入社年数": [5, 3, 10]
})

# 列幅の調整
df.style.set_column_widths([100, 100, 50, 50])

# 交互行の色分け
df.style.apply(lambda x: ['background-color: #fbfbfb' if i % 2 == 0 else '' for i in x], axis=1)

# 部署ごとの色分け
df.style.applymap(lambda x: "background-color: #fffacd" if x["部署"] == "営業" else "", subset=["部署"])

# 年齢の昇順ソート
df.style.set_index("年齢").sort_values(by="年齢", ascending=True)

# Excelファイル出力
df.to_excel("従業員情報.xlsx", engine="openpyxl")

商品情報の比較

# データフレーム作成
df = pd.DataFrame({
    "商品名": ["A", "B", "C"],
    "価格": [1000, 2000, 3000],
    "評価": [4.5, 3.8, 4.2],
    "特徴": ["軽量", "高機能", "多機能"]
})

# ハイライト表示
df.style.highlight_max(color="yellow")

# ボーダー設定
df.style.set_table_styles([
    {
        "selector": "th",
        "props": [("border", "1px solid black")]
    },
    {
        "selector": "td",
        "props": [("border", "1px solid #ddd")]
    }
])

# 折れ線グラフ挿入
df.style.plot(
    x="商品名",
    y="価格",
    kind="line",
    title="価格比較",
    subplots=True,
    legend=False,
    fig=plt.gcf(),
    axes=plt.gca(),
)

# Excelファイル出力
df.to_excel("商品比較.xlsx", engine="openpyxl")

これらのサンプルコードを参考に、様々な書式設定を試して、分かりやすく美しいExcelファイルを作成してみてください。



PandasでスタイリッシュなExcelファイルを出力するその他の方法

XlsxWriterライブラリを使うと、より詳細な書式設定を施したExcelファイルを作成できます。

import pandas as pd
from xlsxwriter import Workbook

# データフレーム作成
df = pd.DataFrame({
    "商品名": ["A", "B", "C", "D", "E"],
    "売上": [100, 200, 300, 400, 500],
    "利益率": [0.1, 0.2, 0.3, 0.4, 0.5]
})

# ワークブックとワークシート作成
workbook = Workbook("売上データ.xlsx")
worksheet = workbook.add_worksheet()

# 書式設定
format1 = workbook.add_format({"text-align": "center"})
format2 = workbook.add_format({"color": "green", "background-color": "yellow"})
format3 = workbook.add_format({"number-format": "0.0%"})

# データ書き込み
worksheet.write_row(0, 0, df.columns, format1)
for i in range(len(df)):
    worksheet.write_row(i + 1, 0, df.iloc[i], format1)
    worksheet.write(i + 1, 1, df.iloc[i, 1], format2)
    worksheet.write(i + 1, 2, df.iloc[i, 2], format3)

# 条件付き書式設定
for i in range(len(df)):
    if df.iloc[i, 1] >= 200:
        worksheet.conditional_format(i + 1, 1, i + 1, 1, {"type": "cell", "criteria": "greater than", "value": 200, "format": format2})

# ワークブックを閉じる
workbook.close()

HTMLテンプレートを使って、より自由度の高いデザインのExcelファイルを作成できます。

import pandas as pd
from jinja2 import Template

# データフレーム作成
df = pd.DataFrame({
    "商品名": ["A", "B", "C", "D", "E"],
    "売上": [100, 200, 300, 400, 500],
    "利益率": [0.1, 0.2, 0.3, 0.4, 0.5]
})

# HTMLテンプレート
template = """
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>売上データ</title>
</head>
<body>
    <h1>売上データ</h1>
    <table>
        <tr>
            <th>商品名</th>
            <th>売上</th>
            <th>利益率</th>
        </tr>
        {% for row in data %}
        <tr>
            <td>{{ row.商品名 }}</td>
            <td>{{ row.売上 }}</td>
            <td>{{ row.利益率 }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>
"""

# HTMLファイル出力
with open("売上データ.html", "w") as f:
    f.write(template.render(data=df.to_dict(orient="records")))

# HTMLファイルをExcelに変換
import subprocess

subprocess.run(["wkhtmltopdf", "売上データ.html", "売上データ.xlsx"])

これらの方法は、pandas.io.formats.style.Styler.to_excelよりも複雑ですが、より高度な書式設定やデザインを実現できます。

その他の方法

  • ExcelWriterライブラリ
  • openpyxlライブラリ
  • xlwingsライブラリ

これらのライブラリを使って、様々な方法でスタイリッシュなExcelファイルを作成できます。

Pandasには、スタイリッシュなExcelファイル




Pandasで日付処理をマスターしよう! Data Offsets と DateOffset.__call__ メソッドの超入門

Data Offsets は、日付系列データでよく見られる時間的な間隔を表すためのものです。例えば、日次データでは、1 日、2 日、3 日といったオフセットが考えられます。また、月次データでは、1 ヶ月、3 ヶ月、6 ヶ月といったオフセットが考えられます。



DatetimeIndex と Micro.kwds を使って時間間隔を表現

Micro. kwds は、pandas. tseries. offsets. Micro クラスで使用されるオプション引数です。このクラスは、マイクロ秒単位の時間間隔を表します。Micro. kwds は、以下のオプション引数を受け取ります。


Pandas データオフセット:Tick オブジェクトを使いこなして時系列データ分析をレベルアップ

この解説では、pandas. tseries. offsets. Tick オブジェクトの copy メソッドについて、以下の内容を詳しく説明します。Tick オブジェクトの概要copy メソッドの機能メソッドの引数と戻り値使用例関連するデータオフセット


Pandas Data Offsets でカスタムビジネス月の末日を扱う:詳細解説とサンプルコード

pandas. tseries. offsets. CustomBusinessMonthEnd は、Pandas の Data Offsets ライブラリで提供されるクラスであり、カスタムビジネス月の末日 を基準とした日付オフセットを定義します。このオフセットは、指定された月数だけ、平日のみ を進めることができます。


Pandas:CustomBusinessMonthEnd.applyを用いた月末営業日の計算方法と祝日・曜日マスクの考慮

pandas. tseries. offsets. CustomBusinessMonthEnd. apply は、Pandas の DateOffset オブジェクト CustomBusinessMonthEnd を使用して、指定された日付にオフセットを適用し、新しい日付を生成する関数です。この関数は、月末の営業日を基準に、指定された月数分のオフセットを行うことができます。



Pandas DatetimeIndex の minute 属性で時間操作をマスター!

pandas. DatetimeIndex. minute は、pandas ライブラリの DatetimeIndex オブジェクトの minute 属性です。これは、DatetimeIndex オブジェクト内の各エントリの分数を取得するために使用されます。


pandas Data offsets: CustomBusinessDay.is_year_startの使い方

概要:CustomBusinessDay は、祝日などを除いた営業日ベースの日付オフセットを表すクラスです。is_year_start は、CustomBusinessDay オブジェクトを受け取り、その日付が その年の最初の営業日 かどうかを判定します。 *判定は、以下の条件に基づいて行われます。 日付がその年の1月1日であること 日付がその年の最初の営業日であること


時系列データ分析に役立つ YearEnd.is_anchored 属性: Pandas Data Offsets の活用

pandas. tseries. offsets. YearEnd. is_anchored は、pandas ライブラリの Data Offsets 機能で使用される関数です。この関数は、YearEnd オフセットがアンカーされているかどうかを返します。


Pandas Series の attrs 属性を使いこなす! データ分析を効率化する 5 つの方法

attrs は、Series オブジェクトに 辞書 として関連付けられる特殊な属性です。この辞書には、ユーザー定義のキーと値のペアを格納できます。これらの値は、シリーズに関する追加情報や、シリーズの操作方法に関するヒントとして使用できます。


pandas.tseries.offsets.BusinessMonthEnd.apply_indexを使いこなす! 月末の営業日を効率的に取得する方法

Data offsets は、pandas の時間軸操作機能の一つです。日付や時刻に特定の期間を加減したり、特定の日付や時刻を取得したりすることができます。BusinessMonthEnd は、月末の営業日を表す Data offset です。例えば、2023年12月2日に BusinessMonthEnd を適用すると、2023年12月31日(金曜日)が返されます。