クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Pythonで表のデータを読む

このレッスンのあとで: Pythonで、表のデータの行を読んで、条件に合う行だけを取り出すことができる。

45分のレッスンコマンドなし

持ち戻りは何件ありましたか

大阪の物流会社で、配送の事務を始めたとします。朝、課長から「昨日の持ち戻りは何件だった?」と聞かれました。

配送記録は、1日で3000行あります。一行ずつ目で数えるのは無理です。

Pythonを数行書けば、答えはすぐに出ます。

このレッスンのゴール

メモ

Pythonで、表のデータの行を読んで、条件に合う行だけを取り出すことができる。

キーワード

ことばいみれい
行一件分の記録です。
列どの行にもある項目です。area
辞書名前と値を組にして持つ入れ物です。{"area": "北区"}
辞書のリスト表全体です。一行が一つの辞書です。
絞り込み条件に合う行だけを残すことです。

学生が入力するセルは、このプレビューでは空白です。

一行は一つの辞書です

表計算ソフトの画面を思い出してください。いちばん上に列の名前が並び、その下に一件ずつ行が続きます。

Pythonでは、一行を辞書で表します。列の名前がキーで、そこに値が入ります。

表全体は、辞書を並べたリストです。deliveries[0] は1行目で、deliveries[0]["area"] は1行目の地区です。

名前は英語で書きます

ヒント

変数やキーの名前は、英語で書きます。多くの職場で、そう決めています。どの国の人が読んでも分かるからです。画面に出す文字は、日本語のままで大丈夫です。

一行と一つの値を読む

コード: python
# 配送記録の1行は、1つの辞書です。列の名前がキーになります。
deliveries = [
    {"id": "D-101", "area": "北区", "weight_kg": 3, "status": "配達済み"},
    {"id": "D-102", "area": "浪速区", "weight_kg": 12, "status": "持ち戻り"},
    {"id": "D-103", "area": "北区", "weight_kg": 7, "status": "配達中"},
]

print("行の数:", len(deliveries))
print("1行目の伝票番号:", deliveries[0]["id"])
print("1行目の地区:", deliveries[0]["area"])

# 最後の行を書きかえて、3行目の状態を表示してみましょう。
print("2行目の重さ:", deliveries[1]["weight_kg"], "kg")

同じ配送記録を、一つずつ読む

Python意味値
len(deliveries)行の数3
deliveries[0]1行目D-101 の記録全体
deliveries[0]["area"]1行目の地区北区
deliveries[2]["weight_kg"]3行目の重さ7

学生が入力するセルは、このプレビューでは空白です。

for と if で行を絞り込みます

絞り込むときは、行を一つずつ順番に見ます。この役目は for 文です。

ループの中で、if 文が行を調べます。条件に合えば、append で新しいリストに入れます。

ループが終わると、新しいリストには欲しい行だけが残ります。件数は len で数えます。

持ち戻りだけを取り出す

コード: python
deliveries = [
    {"id": "D-101", "area": "北区", "weight_kg": 3, "status": "配達済み"},
    {"id": "D-102", "area": "浪速区", "weight_kg": 12, "status": "持ち戻り"},
    {"id": "D-103", "area": "北区", "weight_kg": 7, "status": "配達中"},
    {"id": "D-104", "area": "淀川区", "weight_kg": 2, "status": "持ち戻り"},
    {"id": "D-105", "area": "北区", "weight_kg": 15, "status": "持ち戻り"},
]

# 条件に合う行だけを、新しいリストに入れます。
returned = []
for row in deliveries:
    if row["status"] == "持ち戻り":
        returned.append(row)

for row in returned:
    print(row["id"], row["area"], row["weight_kg"], "kg")
print("持ち戻りの件数:", len(returned))

# 条件を書きかえて、北区の配送だけを取り出してみましょう。

よくある間違い

注意

絞り込むと、条件に合わない行が消えると思う人が多いです。実際は消えません。ループは新しいリストを作るだけで、元のリストには全部の行が残ります。だから同じ記録を、別の条件でもう一度絞り込めます。

やってみましょう: 地区ごとの配送

ドライバーの割り当てを決めるために、地区ごとの配送一覧が必要です。地区の名前を受け取り、その地区の行だけを返す関数を書いてください。見えないテストが、答えを確かめます。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。