Pythonで文字列を扱うとき、多くの人が「f-string」を使っています。
しかし、f-stringのフォーマット指定子を使いこなせば、データ分析のレポート作成や数値の表示が格段に楽になります。
今回は、f-stringの基本から、桁揃え、パーセント表示、日付フォーマットまで、実務で役立つ方法を紹介します。
Contents
- 文字列フォーマットとは?
- なぜ文字列フォーマットが必要か
- f-stringとは?
- 数値のフォーマット基本
- 小数点以下の桁数を指定する
- フォーマット指定子の構造
- 3桁区切り(カンマ区切り)
- 大きな数値を読みやすくする
- 小数点と組み合わせる
- 日本語形式(アンダースコア区切り)
- パーセント表示
- 桁揃え(アラインメント)
- 文字列の幅を指定する
- 埋め文字を指定する
- ゼロ埋め(ゼロパディング)
- 数値を固定桁数で表示する
- 型指定子の意味
- 日付・時刻のフォーマット
- datetimeオブジェクトのフォーマット
- よく使う日付フォーマット指定子
- ファイル名に使える日付形式
- 符号の表示
- 正の数にも符号を表示する
- 変化量の表示に便利
- 式の埋め込みと自己文書化
- 式を直接埋め込む
- 自己文書化式
- デバッグに便利
- 便利な関数化
- 数値フォーマット関数
- pandas DataFrameでの活用
- まとめ
文字列フォーマットとは?
なぜ文字列フォーマットが必要か
データ分析では、計算結果をわかりやすく表示することが重要です。
例えば、以下のような場面を考えてみましょう。
以下、コードです。
# 計算結果をそのまま表示すると...
price = 1234567
ratio = 0.8765432
print(f"価格: {price}円")
print(f"割合: {ratio}")
以下、実行結果です。
価格: 1234567円 割合: 0.8765432
このままでは数値が読みにくいですね。
「1,234,567円」や「87.65%」のように表示できたら、もっと見やすくなります。
これを実現するのが文字列フォーマットです。
f-stringとは?
f-string(フォーマット済み文字列リテラル)は、Python 3.6で導入された文字列フォーマットの方法です。
文字列の前に f をつけ、{} の中に変数や式を書くことで、その値が埋め込まれます。
以下、コードです。
name = "田中"
age = 25
print(f"私の名前は{name}です。年齢は{age}歳です。")
以下、実行結果です。
私の名前は田中です。年齢は25歳です。
数値のフォーマット基本
小数点以下の桁数を指定する
小数点以下の桁数を指定するには、: の後に .桁数f を書きます。
ここで f は「浮動小数点数(float)」を意味します。
以下、コードです。
pi = 3.141592653589793
print(f"小数点以下2桁: {pi:.2f}")
print(f"小数点以下4桁: {pi:.4f}")
print(f"小数点以下0桁(整数化): {pi:.0f}")
以下、実行結果です。
小数点以下2桁: 3.14 小数点以下4桁: 3.1416 小数点以下0桁(整数化): 3
フォーマット指定子の構造
フォーマット指定子は {値:指定子} の形式で書きます。
指定子の基本構造を理解しておきましょう。
以下、コードです。
# フォーマット指定子の構造
# {値:[埋め文字][揃え方向][幅][,][.精度][型]}
value = 42.5
# 例:幅10文字、小数点以下2桁
print(f"'{value:10.2f}'") # 幅10、小数点以下2桁
以下、実行結果です。
' 42.50'
3桁区切り(カンマ区切り)
大きな数値を読みやすくする
大きな数値は、3桁ごとにカンマを入れると読みやすくなります。
フォーマット指定子に , を追加するだけで実現できます。
以下、コードです。
revenue = 1234567890
users = 9876543
print(f"売上: {revenue:,}円")
print(f"ユーザー数: {users:,}人")
以下、実行結果です。
売上: 1,234,567,890円 ユーザー数: 9,876,543人
小数点と組み合わせる
3桁区切りと小数点の指定は組み合わせられます。
以下、コードです。
amount = 1234567.89
print(f"金額: {amount:,.2f}円")
以下、実行結果です。
金額: 1,234,567.89円
日本語形式(アンダースコア区切り)
Python 3.6以降では、アンダースコア _ での区切りも可能です。
以下、コードです。
number = 1234567890
print(f"カンマ区切り: {number:,}")
print(f"アンダースコア区切り: {number:_}")
以下、実行結果です。
カンマ区切り: 1,234,567,890 アンダースコア区切り: 1_234_567_890
パーセント表示
データ分析では、割合をパーセントで表示することが多いです。
フォーマット指定子に % を使うと、自動的に100倍してパーセント記号を付けてくれます。
以下、コードです。
accuracy = 0.8765
error_rate = 0.0234
growth = 1.5 # 150%
print(f"精度: {accuracy:.2%}")
print(f"エラー率: {error_rate:.2%}")
print(f"成長率: {growth:.1%}")
以下、実行結果です。
精度: 87.65% エラー率: 2.34% 成長率: 150.0%
桁揃え(アラインメント)
文字列の幅を指定する
レポートやテーブルを作るとき、文字列の幅を揃えると見やすくなります。
フォーマット指定子で幅を指定できます。
揃え方向を指定するには、以下の記号を使います。
| 記号 | 意味 | 例 |
|---|---|---|
< |
左揃え | {value:<10} |
> |
右揃え | {value:>10} |
^ |
中央揃え |
以下、コードです。桁揃えによってきれいに並びます。
items = ["りんご", "バナナ", "オレンジ"]
prices = [120, 98, 150]
print("=== 桁揃えなし ===")
for item, price in zip(items, prices):
print(f"{item}: {price}円")
print("\n=== 桁揃えあり ===")
for item, price in zip(items, prices):
# 商品名は左揃え8文字、価格は右揃え5文字
print(f"{item:<8}: {price:>5}円")
以下、実行結果です。
=== 桁揃えなし === りんご: 120円 バナナ: 98円 オレンジ: 150円 === 桁揃えあり === りんご : 120円 バナナ : 98円 オレンジ: 150円
埋め文字を指定する
デフォルトでは空白で埋められますが、任意の文字で埋めることもできます。
以下、コードです。
title = "レポート"
print(f"{title:=^20}") # '=' で埋めて中央揃え
print(f"{title:-<20}") # '-' で埋めて左揃え
print(f"{title:*>20}") # '*' で埋めて右揃え
以下、実行結果です。
========レポート======== レポート---------------- ****************レポート
ゼロ埋め(ゼロパディング)
数値を固定桁数で表示する
ファイル名やIDなど、固定桁数で数値を表示したい場合があります。
0 を埋め文字として使います。
以下、コードです。数値が3桁でゼロ埋めされます。
for i in range(1, 15):
print(f"file_{i:03d}.csv") # 3桁でゼロ埋め
以下、実行結果です。
file_001.csv file_002.csv file_003.csv file_004.csv file_005.csv file_006.csv file_007.csv file_008.csv file_009.csv file_010.csv file_011.csv file_012.csv file_013.csv file_014.csv
型指定子の意味
ゼロ埋めでよく使う型指定子を整理しておきましょう。
| 指定子 | 意味 | 例 |
|---|---|---|
d |
10進整数 | {42:05d} → 00042 |
f |
浮動小数点数 | {3.14:06.2f} → 003.14 |
x |
16進数(小文字) | {255:04x} → 00ff |
X |
16進数(大文字) | {255:04X} → 00FF |
b |
2進数 | {10:08b} → |
以下、コードです。
number = 42
print(f"10進数: {number:05d}")
print(f"16進数: {number:04x}")
print(f"2進数: {number:08b}")
以下、実行結果です。
10進数: 00042 16進数: 002a 2進数: 00101010
日付・時刻のフォーマット
datetimeオブジェクトのフォーマット
日付や時刻を扱う datetime オブジェクトも、f-stringでフォーマットできます。
以下、コードです。指定した形式で日付・時刻が表示されます。
from datetime import datetime
now = datetime.now()
print(f"そのまま: {now}")
print(f"日付のみ: {now:%Y-%m-%d}")
print(f"日本語形式: {now:%Y年%m月%d日}")
print(f"時刻のみ: {now:%H:%M:%S}")
print(f"完全形式: {now:%Y-%m-%d %H:%M:%S}")
以下、実行結果です。
そのまま: 2026-02-08 12:27:57.582249 日付のみ: 2026-02-08 日本語形式: 2026年02月08日 時刻のみ: 12:27:57 完全形式: 2026-02-08 12:27:57
よく使う日付フォーマット指定子
日付フォーマットでよく使う指定子を整理しておきましょう。
| 指定子 | 意味 | 例 |
|---|---|---|
%Y |
4桁の年 | 2024 |
%m |
2桁の月 | 01〜12 |
%d |
2桁の日 | 01〜31 |
%H |
24時間制の時 | 00〜23 |
%M |
分 | 00〜59 |
%S |
秒 | 00〜59 |
%A |
曜日(英語) | Monday |
%a |
曜日(短縮) | Mon |
%B |
月名(英語) | January |
%b |
月名(短縮) |
以下、コードです。
from datetime import datetime
now = datetime.now()
print(f"曜日入り: {now:%Y/%m/%d (%a)}")
print(f"月名入り: {now:%B %d, %Y}")
以下、実行結果です。
曜日入り: 2026/02/08 (Sun) 月名入り: February 08, 2026
ファイル名に使える日付形式
ファイル名に日付を入れる場合、/ や : は使えないので注意が必要です。
以下、コードです。
from datetime import datetime
now = datetime.now()
# ファイル名に使える形式
filename = f"report_{now:%Y%m%d_%H%M%S}.csv"
print(f"ファイル名: {filename}")
以下、実行結果です。
ファイル名: report_20260208_122937.csv
符号の表示
正の数にも符号を表示する
デフォルトでは、正の数には + 記号が表示されません。
明示的に表示するには + を指定します。
以下、コードです。
positive = 42
negative = -42
zero = 0
# デフォルト
print(f"デフォルト: {positive}, {negative}, {zero}")
# 常に符号を表示
print(f"常に符号: {positive:+}, {negative:+}, {zero:+}")
# 正の数にはスペース
print(f"スペース: {positive: }, {negative: }, {zero: }")
以下、実行結果です。
デフォルト: 42, -42, 0 常に符号: +42, -42, +0 スペース: 42, -42, 0
変化量の表示に便利
売上の増減など、変化量を表示するときに符号付き表示が便利です。
以下、コードです。
changes = [150, -80, 0, 230, -45]
print("売上変化:")
for change in changes:
print(f" {change:+,}円")
以下、実行結果です。
売上変化: +150円 -80円 +0円 +230円 -45円
式の埋め込みと自己文書化
式を直接埋め込む
f-stringの {} の中には、変数だけでなく式も書けます。
以下、コードです。
x = 10
y = 3
print(f"足し算: {x} + {y} = {x + y}")
print(f"掛け算: {x} × {y} = {x * y}")
print(f"割り算: {x} ÷ {y} = {x / y:.2f}")
以下、実行結果です。
足し算: 10 + 3 = 13 掛け算: 10 × 3 = 30 割り算: 10 ÷ 3 = 3.33
自己文書化式
Python 3.8以降では、= を使うと変数名と値を同時に表示できます。
これを自己文書化式(self-documenting expression)と呼びます。
以下、コードです。変数名=値 の形式で表示されます。
name = "Alice"
age = 30
score = 85.5
# 従来の書き方
print(f"name={name}, age={age}, score={score}")
# 自己文書化式(Python 3.8以降)
print(f"{name=}, {age=}, {score=}")
以下、実行結果です。
name=Alice, age=30, score=85.5 name='Alice', age=30, score=85.5
デバッグに便利
自己文書化式は、デバッグ時に変数の値を確認するのに便利です。
以下、コードです。この例では、デバック時に表示させたい変数名と値が一目でわかります。
def calculate_discount(price, discount_rate):
discounted = price * (1 - discount_rate)
print(f"DEBUG: {price=}, {discount_rate=}, {discounted=:.2f}")
return discounted
result = calculate_discount(1000, 0.2)
以下、実行結果です。
DEBUG: price=1000, discount_rate=0.2, discounted=800.00
便利な関数化
数値フォーマット関数
よく使うフォーマットを関数化しておくと便利です。
以下、コードです。
# 通貨形式でフォーマット
def format_currency(value, decimals=0):
return f"¥{value:,.{decimals}f}"
# パーセント形式でフォーマット
def format_percent(value, decimals=1):
return f"{value:.{decimals}%}"
# 変化量を符号付きでフォーマット
def format_change(value, decimals=1):
return f"{value:+,.{decimals}f}"
# 使用例
print(format_currency(1234567))
print(format_currency(1234.567, 2))
print(format_percent(0.8765))
print(format_percent(0.8765, 2))
print(format_change(150.5))
print(format_change(-80.3))
以下、実行結果です。
¥1,234,567 ¥1,234.57 87.6% 87.65% +150.5 -80.3
pandas DataFrameでの活用
pandasのDataFrameでもフォーマット関数を活用できます。
以下、コードです。
import pandas as pd
# サンプルデータ
df = pd.DataFrame({
'商品': ['商品A', '商品B', '商品C'],
'売上': [1234567, 987654, 2345678],
'成長率': [0.156, -0.082, 0.234]
})
# フォーマットを適用して表示用に変換
df['売上(表示用)'] = df['売上'].apply(lambda x: f"{x:,}円")
df['成長率(表示用)'] = df['成長率'].apply(lambda x: f"{x:+.1%}")
print(df)
以下、実行結果です。
商品 売上 成長率 売上(表示用) 成長率(表示用) 0 商品A 1234567 0.156 1,234,567円 +15.6% 1 商品B 987654 -0.082 987,654円 -8.2% 2 商品C 2345678 0.234 2,345,678円 +23.4%
まとめ
最後に、この記事で学んだフォーマット指定子を整理します。
================================================================
f-string フォーマット指定子 クイックリファレンス
================================================================
【基本構文】
f"{値:指定子}"
【数値のフォーマット】
{x:.2f} 小数点以下2桁
{x:,} 3桁区切り(カンマ)
{x:,.2f} 3桁区切り+小数点
{x:.2%} パーセント表示
{x:+} 符号を常に表示
【桁揃え】
{x:<10} 左揃え(幅10) {x:>10} 右揃え(幅10)
{x:^10} 中央揃え(幅10)
{x:0>5} ゼロ埋め(幅5)
{x:=^20} '='で埋めて中央揃え
【整数の進数変換】
{x:d} 10進数
{x:x} 16進数(小文字)
{x:X} 16進数(大文字)
{x:b} 2進数
【日付・時刻】
{dt:%Y-%m-%d} 2024-01-15
{dt:%H:%M:%S} 10:30:45
{dt:%Y年%m月%d日} 2024年01月15日
【自己文書化(Python 3.8+)】
{x=} 変数名=値 の形式で表示
================================================================
これらのテクニックを使いこなせば、データ分析のレポート作成が格段に効率化されます。
