f-stringだけじゃない!Python文字列フォーマットの小技

Pythonで文字列を扱うとき、多くの人が「f-string」を使っています。

しかし、f-stringフォーマット指定子を使いこなせば、データ分析のレポート作成や数値の表示が格段に楽になります。

今回は、f-stringの基本から、桁揃えパーセント表示日付フォーマットまで、実務で役立つ方法を紹介します。

文字列フォーマットとは?

 なぜ文字列フォーマットが必要か

データ分析では、計算結果をわかりやすく表示することが重要です。

例えば、以下のような場面を考えてみましょう。

以下、コードです。

# 計算結果をそのまま表示すると...
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}
^ 中央揃え {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}00001010

以下、コードです。

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 月名(短縮) Jan

 

以下、コードです。

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=} 変数名=値 の形式で表示

================================================================

これらのテクニックを使いこなせば、データ分析のレポート作成が格段に効率化されます。