<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Python基礎入門｜インストール方法と環境構築の完全ガイド【Colab対応】 | Python Data Lab（Pythonデータラボ）</title>
	<atom:link href="https://pythondatalab.com/category/python-basic/python-env/feed/" rel="self" type="application/rss+xml" />
	<link>https://pythondatalab.com</link>
	<description>Python初心者向けに、わかりやすいデータ分析の解説を提供します。</description>
	<lastBuildDate>Wed, 06 May 2026 13:48:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://pythondatalab.com/wp-content/uploads/2025/12/cropped-rogo-32x32.png</url>
	<title>Python基礎入門｜インストール方法と環境構築の完全ガイド【Colab対応】 | Python Data Lab（Pythonデータラボ）</title>
	<link>https://pythondatalab.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>pandas where()・mask()の使い方｜条件に応じて値を残す・置き換える方法</title>
		<link>https://pythondatalab.com/pandas-where-mask/</link>
					<comments>https://pythondatalab.com/pandas-where-mask/#respond</comments>
		
		<dc:creator><![CDATA[coin_collector]]></dc:creator>
		<pubDate>Wed, 06 May 2026 13:48:04 +0000</pubDate>
				<category><![CDATA[Python実行環境・設定]]></category>
		<guid isPermaLink="false">https://pythondatalab.com/?p=2060</guid>

					<description><![CDATA[<p>pandasのwhere()・mask()の使い方を初心者向けに解説。条件を満たす値を残す方法、条件に合う値を置き換える方法、where()とmask()の違い、replace()・fillna()・loc・np.where()との使い分けも整理します。</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://pythondatalab.com/pandas-where-mask/">pandas where()・mask()の使い方｜条件に応じて値を残す・置き換える方法</a> first appeared on <a rel="nofollow" href="https://pythondatalab.com">Python Data Lab（Pythonデータラボ）</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[

<div class="colab-article">
<link href="https://cdn.jsdelivr.net/npm/prismjs/themes/prism-tomorrow.min.css" rel="stylesheet"/>
<link href="https://cdn.jsdelivr.net/npm/prismjs/plugins/toolbar/prism-toolbar.min.css" rel="stylesheet"/>
<link href="https://cdn.jsdelivr.net/npm/prismjs/plugins/line-numbers/prism-line-numbers.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/npm/prismjs/components/prism-core.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs/components/prism-clike.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs/components/prism-python.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs/plugins/line-numbers/prism-line-numbers.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs/plugins/toolbar/prism-toolbar.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>
<style>
  .colab-article pre[class*="language-"],
  .colab-article pre.line-numbers {
    margin: 0 !important;
    padding: 1em;
    background: #2d2d2d;
    color: #ccc;
    overflow-x: auto;
  }
  .colab-article .wp-block-table {
    width: auto;
    border-collapse: collapse;
    margin: 0.8em 0;
    display: table;
  }
  .colab-article .wp-block-table th,
  .colab-article .wp-block-table td {
    border: 1px solid #ddd;
    vertical-align: top;
  }
  .colab-article .colab-output {
    margin: 0 !important;
    padding: 0.8em;
    white-space: pre-wrap;
    background: #f6f8fa;
    border: 1px solid #ddd;
    overflow-x: auto;
  }
  .colab-article .colab-figure img {
    max-width: 100%;
    height: auto;
  }

  .colab-article pre.line-numbers,
  .colab-article pre[class*="language-"] {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
  }
  .colab-article code.language-python {
    white-space: pre;
  }

</style>

<p>Pandasで前処理をしていると、次のような場面で迷うことがあります。</p>
<ul>
<li>60点以上の点数だけ残し、60点未満は欠損値として扱いたい</li>
<li>売上がマイナスになっている不自然な値だけ、0やNaNにしたい</li>
<li>年齢が120歳を超えるような確認が必要な値だけ、欠損値にしたい</li>
<li><code>replace()</code>、<code>loc</code>、<code>where()</code>、<code>mask()</code>のどれを使えばよいかわからない</li>
</ul>
<p>最初に結論を言うと、<strong><code>where()</code>は「条件を満たす値を残す」ために使い、<code>mask()</code>は「条件を満たす値を置き換える」ために使います。</strong></p>
<p>言い換えると、次のように考えると分かりやすいです。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">使いたい場面</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">使うメソッド</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を残したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>where()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を置き換えたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>mask()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">特定の値そのものを置き換えたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>replace()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">欠損値だけを埋めたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>fillna()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件に合う行を取り出したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件抽出・<code>loc</code></td>
</tr>
</tbody>
</table>
<p>この記事では、Google Colabでそのまま試せる小さなDataFrameを使いながら、<code>where()</code>と<code>mask()</code>の違い、使いどころ、よくあるミスを初心者向けに整理します。</p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事でわかること</a></li><li><a href="#toc2" tabindex="0">Pandas前処理の中での位置づけ</a></li><li><a href="#toc3" tabindex="0">where()とmask()の判断基準</a></li><li><a href="#toc4" tabindex="0">サンプルデータを用意する</a></li><li><a href="#toc5" tabindex="0">where()の基本：条件を満たす値を残す</a><ol><li><a href="#toc6" tabindex="0">補足：NaNが入ると小数表示になることがある</a></li></ol></li><li><a href="#toc7" tabindex="0">where()で条件に合わない値を別の値に置き換える</a></li><li><a href="#toc8" tabindex="0">mask()の基本：条件を満たす値を置き換える</a></li><li><a href="#toc9" tabindex="0">where()とmask()の違いを同じデータで比較する</a></li><li><a href="#toc10" tabindex="0">複数条件でwhere()を使う場合</a></li><li><a href="#toc11" tabindex="0">補足：DataFrame全体にもwhere()・mask()は使える</a></li><li><a href="#toc12" tabindex="0">where()・mask()・replace()・fillna()・locの使い分け</a></li><li><a href="#toc13" tabindex="0">locでの条件代入との違い</a></li><li><a href="#toc14" tabindex="0">新しい列として結果を残すと確認しやすい</a></li><li><a href="#toc15" tabindex="0">よくあるミス1：代入しないと元のDataFrameは変わらない</a></li><li><a href="#toc16" tabindex="0">よくあるミス2：条件式の向きが逆になる</a></li><li><a href="#toc17" tabindex="0">条件に合わない値をNaNにしたあとの流れ</a></li><li><a href="#toc18" tabindex="0">np.where()には軽く触れる程度でよい</a></li><li><a href="#toc19" tabindex="0">データ分析の流れではどこで使うか</a></li><li><a href="#toc20" tabindex="0">まとめ</a></li><li><a href="#toc21" tabindex="0">次に読みたい関連記事</a><ol><li><a href="#toc22" tabindex="0"> カテゴリから探す</a></li><li><a href="#toc23" tabindex="0">where()とmask()の違いは何ですか？</a></li><li><a href="#toc24" tabindex="0">where()とreplace()はどう使い分けますか？</a></li><li><a href="#toc25" tabindex="0">where()とlocで条件代入する方法は何が違いますか？</a></li><li><a href="#toc26" tabindex="0">where()で元のDataFrameが変わらないのはなぜですか？</a></li><li><a href="#toc27" tabindex="0">条件に合わない値をNaNにするにはどうすればよいですか？</a></li><li><a href="#toc28" tabindex="0">np.where()とpandasのwhere()はどちらを使えばよいですか？</a></li><li><a href="#toc29" tabindex="0">複数条件でもwhere()は使えますか？</a></li><li><a href="#toc30" tabindex="0">fillna()とは何が違いますか？</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">この記事でわかること</span></h2>
<p>この記事では、次の内容を学びます。</p>
<ul>
<li><code>where()</code>の基本的な使い方</li>
<li><code>mask()</code>の基本的な使い方</li>
<li><code>where()</code>と<code>mask()</code>の違い</li>
<li>条件に合わない値を<code>NaN</code>にする方法</li>
<li><code>NaN</code>にしたときに整数列が小数表示になる理由</li>
<li>条件に応じて別の値に置き換える方法</li>
<li><code>loc</code>、<code>replace()</code>、<code>fillna()</code>、<code>np.where()</code>との使い分け</li>
<li>初心者が間違えやすい条件式の向き</li>
</ul>
<h2><span id="toc2">Pandas前処理の中での位置づけ</span></h2>
<p><code>where()</code>と<code>mask()</code>は、DataFrameを確認したあとに、<strong>条件に応じて値を整える前処理</strong>で役立ちます。</p>
<p>たとえば、次のような流れです。</p>
<ol>
<li><code>info()</code>や<code>describe()</code>でデータの型・欠損値・統計量を確認する</li>
<li><code>unique()</code>や<code>value_counts()</code>で値の中身を確認する</li>
<li><code>replace()</code>で表記ゆれを直す</li>
<li><code>where()</code>や<code>mask()</code>で条件に合わない値・確認が必要な値を整理する</li>
<li><code>fillna()</code>で欠損値を補う</li>
<li><code>groupby()</code>やグラフで集計・可視化する</li>
</ol>
<p>つまり、<code>where()</code>と<code>mask()</code>は、<strong>集計や可視化の前に、条件に応じて値を整えるための道具</strong>です。</p>
<h2><span id="toc3">where()とmask()の判断基準</span></h2>
<p>まず、<code>where()</code>と<code>mask()</code>の違いを先に押さえます。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">メソッド</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">考え方</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>where(条件)</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を残す</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上だけ残す</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>mask(条件)</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を置き換える</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点未満をNaNにする</td>
</tr>
</tbody>
</table>
<p>特に初心者が混乱しやすいのは、<strong>条件に合う値をどうしたいのか</strong>です。</p>
<ul>
<li>条件に合う値を残したい → <code>where()</code></li>
<li>条件に合う値を消したい・置き換えたい → <code>mask()</code></li>
</ul>
<p>この記事では、まず同じサンプルデータを使って、<code>where()</code>と<code>mask()</code>の動きを確認していきます。</p>
<h2><span id="toc4">サンプルデータを用意する</span></h2>
<p>ここでは、テスト点数、売上、年齢を持つ小さなDataFrameを使います。</p>
<p>売上の<code>-500</code>は、今回の例では「本来はマイナスにならないはずの入力ミス」として扱います。<br/>
年齢の<code>135</code>も、今回の例では「確認が必要な値」として扱います。</p>
<pre class="line-numbers"><code class="language-python">import pandas as pd

df = pd.DataFrame({
    "名前": ["田中", "佐藤", "鈴木", "高橋", "伊藤", "山本"],
    "点数": [82, 55, 91, 47, 60, 73],
    "売上": [12000, -500, 18500, 0, 9200, 15000],
    "年齢": [24, 31, 135, 28, 42, 19]
})

df</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">年齢</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">24</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">-500</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">31</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">135</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">28</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">42</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">19</td></tr></tbody></table>
<p>このDataFrameでは、次のような前処理を考えます。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">列</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">確認したいこと</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">処理例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">点数</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上だけ残したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点未満を<code>NaN</code>にする</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">売上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">マイナスの売上を整理したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">負の値を0または<code>NaN</code>にする</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">年齢</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120歳を超える値を確認対象にしたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120歳超を<code>NaN</code>にする</td>
</tr>
</tbody>
</table>
<p>実務でも、CSVやExcelを読み込んだあとに、このような「条件に応じた値の整理」が必要になることがあります。</p>
<h2><span id="toc5">where()の基本：条件を満たす値を残す</span></h2>
<p><code>where()</code>は、<strong>条件を満たす値を残し、条件を満たさない値を置き換える</strong>メソッドです。</p>
<p>基本形は次のように考えます。</p>
<pre class="line-numbers"><code class="language-python">Series.where(条件, other=置き換える値)
</code></pre>
<p><code>other</code>を指定しない場合、条件を満たさない値は<code>NaN</code>になります。</p>
<pre class="line-numbers"><code class="language-python">Series.where(条件)
</code></pre>
<p>ここでは、点数が60点以上の値だけを残し、60点未満を<code>NaN</code>にしてみます。</p>
<pre class="line-numbers"><code class="language-python">df["点数_where"] = df["点数"].where(df["点数"] &gt;= 60)

df[["名前", "点数", "点数_where"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数_where</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73.0</td></tr></tbody></table>
<p>上のコードでは、<code>df["点数"] &gt;= 60</code>という条件を満たす値だけが残ります。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">元の点数</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">条件</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">結果</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">82</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">55</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点未満</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">91</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">47</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点未満</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">60</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">73</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td>
</tr>
</tbody>
</table>
<p>ここで大切なのは、<code>where()</code>は「条件に合う値を置き換える」のではなく、<strong>条件に合う値を残す</strong>という点です。</p>
<h3><span id="toc6">補足：NaNが入ると小数表示になることがある</span></h3>
<p><code>where()</code>や<code>mask()</code>で<code>NaN</code>を作ると、整数だった列が<code>82.0</code>のように小数で表示されることがあります。</p>
<p>これは、<code>NaN</code>が欠損値を表すため、整数だけの列に<code>NaN</code>が混ざると、Pandasが列全体を小数型として扱うことがあるためです。</p>
<p>そのため、結果が<code>82.0</code>のように表示されても、処理が間違っているとは限りません。まずは、<strong>どの値が残り、どの値が<code>NaN</code>になったか</strong>を確認しましょう。</p>
<h2><span id="toc7">where()で条件に合わない値を別の値に置き換える</span></h2>
<p><code>where()</code>では、<code>other</code>を指定すると、条件を満たさない値を別の値に置き換えられます。</p>
<pre class="line-numbers"><code class="language-python">Series.where(残したい条件, other=条件に合わないときの値)
</code></pre>
<p>ここでは、売上が0以上ならそのまま残し、0未満の売上を0に置き換えます。</p>
<pre class="line-numbers"><code class="language-python">df["売上_where_0"] = df["売上"].where(df["売上"] &gt;= 0, other=0)

df[["名前", "売上", "売上_where_0"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上_where_0</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">-500</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td></tr></tbody></table>
<p>この例では、売上が0以上の値はそのまま残り、<code>-500</code>だけが<code>0</code>に置き換わりました。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">処理前の売上</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">条件</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">処理後</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">12000</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">-500</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0未満</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">18500</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">9200</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">15000</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">0以上</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td>
</tr>
</tbody>
</table>
<p><code>0</code>は今回のデータでは「売上がなかった」という意味のある値として残しています。<br/>
一方、<code>-500</code>は「本来はマイナスにならない想定の売上」として、確認・修正対象にしています。</p>
<h2><span id="toc8">mask()の基本：条件を満たす値を置き換える</span></h2>
<p><code>mask()</code>は、<code>where()</code>とは逆に、<strong>条件を満たす値を置き換える</strong>メソッドです。</p>
<p>基本形は次のように考えます。</p>
<pre class="line-numbers"><code class="language-python">Series.mask(条件, other=置き換える値)
</code></pre>
<p><code>other</code>を指定しない場合、条件を満たす値は<code>NaN</code>になります。</p>
<pre class="line-numbers"><code class="language-python">Series.mask(条件)
</code></pre>
<p>ここでは、年齢が120歳を超える値を確認対象として、<code>NaN</code>にします。</p>
<pre class="line-numbers"><code class="language-python">df["年齢_mask"] = df["年齢"].mask(df["年齢"] &gt; 120)

df[["名前", "年齢", "年齢_mask"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">年齢</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">年齢_mask</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">24</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">24.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">31</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">31.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">135</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">28</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">28.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">42</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">42.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">19</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">19.0</td></tr></tbody></table>
<p>この例では、<code>年齢 &gt; 120</code>という条件を満たす<code>135</code>だけが<code>NaN</code>になりました。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">元の年齢</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">条件</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">結果</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">24</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120以下</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">24</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">31</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120以下</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">31</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">135</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120超</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">28</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120以下</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">28</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">42</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120以下</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">42</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">19</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120以下</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">19</td>
</tr>
</tbody>
</table>
<p><code>mask()</code>は、条件に合う値を隠す・置き換えるイメージで使うと理解しやすいです。</p>
<h2><span id="toc9">where()とmask()の違いを同じデータで比較する</span></h2>
<p><code>where()</code>と<code>mask()</code>は、条件の向きを逆にすると同じ結果を作れることがあります。</p>
<p>たとえば、次の2つはどちらも「60点未満をNaNにする」処理です。</p>
<ul>
<li><code>where(df["点数"] &gt;= 60)</code>：60点以上を残す</li>
<li><code>mask(df["点数"] &lt; 60)</code>：60点未満を置き換える</li>
</ul>
<p>同じデータで比較してみましょう。</p>
<pre class="line-numbers"><code class="language-python">compare = pd.DataFrame({
    "名前": df["名前"],
    "元の点数": df["点数"],
    "where_60点以上を残す": df["点数"].where(df["点数"] &gt;= 60),
    "mask_60点未満をNaN": df["点数"].mask(df["点数"] &lt; 60)
})

compare</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">元の点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">where_60点以上を残す</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">mask_60点未満をNaN</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73.0</td></tr></tbody></table>
<p>結果を見ると、<code>where()</code>と<code>mask()</code>で同じような結果になっています。</p>
<p>ただし、考え方は逆です。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">書き方</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">条件の意味</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">何が起きるか</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>where(df["点数"] &gt;= 60)</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上なら残す</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たさない60点未満がNaN</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>mask(df["点数"] &lt; 60)</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点未満なら置き換える</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす60点未満がNaN</td>
</tr>
</tbody>
</table>
<p>迷ったときは、次のように判断してください。</p>
<ul>
<li><strong>残したい条件</strong>を書きたい → <code>where()</code></li>
<li><strong>置き換えたい条件</strong>を書きたい → <code>mask()</code></li>
</ul>
<h2><span id="toc10">複数条件でwhere()を使う場合</span></h2>
<p><code>where()</code>や<code>mask()</code>では、複数条件も指定できます。</p>
<p>複数条件を書くときは、次の点に注意します。</p>
<ul>
<li>それぞれの条件を<code>()</code>で囲む</li>
<li>AND条件は<code>&amp;</code>でつなぐ</li>
<li>OR条件は<code>|</code>でつなぐ</li>
</ul>
<p>ここでは、点数が60点以上かつ90点以下の値だけを残してみます。</p>
<pre class="line-numbers"><code class="language-python">df["点数_60から90"] = df["点数"].where((df["点数"] &gt;= 60) &amp; (df["点数"] &lt;= 90))

df[["名前", "点数", "点数_60から90"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数_60から90</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73.0</td></tr></tbody></table>
<p>この例では、60点以上かつ90点以下の値だけが残ります。<br/>
<code>55</code>や<code>47</code>は60点未満なので<code>NaN</code>になり、<code>91</code>は90点を超えているため<code>NaN</code>になります。</p>
<p>複数条件は便利ですが、初心者のうちは条件式が長くなりやすいです。<br/>
まずは単一条件で<code>where()</code>と<code>mask()</code>の考え方を理解し、そのあと複数条件に進むと分かりやすくなります。</p>
<h2><span id="toc11">補足：DataFrame全体にもwhere()・mask()は使える</span></h2>
<p>ここまでの例では、<code>df["点数"]</code>のように1つの列に対して<code>where()</code>や<code>mask()</code>を使いました。</p>
<p>実は、<code>DataFrame</code>全体に対しても使えます。
ただし、初心者のうちは、まず<strong>1つの列ごとに処理する</strong>ほうが結果を確認しやすいです。</p>
<p>ここでは、数値列だけを取り出して、0以上の値を残し、0未満の値を<code>NaN</code>にしてみます。</p>
<pre class="line-numbers"><code class="language-python">numeric_df = df[["点数", "売上", "年齢"]]

numeric_df.where(numeric_df &gt;= 0)</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">年齢</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">24</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">31</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">135</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">28</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">42</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000.0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">19</td></tr></tbody></table>
<p>このように、<code>DataFrame.where()</code>を使うと、DataFrame内の各値に対して条件を確認できます。</p>
<p>同じ考え方で、<code>DataFrame.mask()</code>もDataFrame全体に使えます。ただし、初心者のうちは、まず1列ずつ処理して結果を確認するほうが安全です。</p>
<p>ただし、実際の記事や学習では、最初からDataFrame全体に使うよりも、</p>
<pre class="line-numbers"><code class="language-python">df["列名"].where(条件)
</code></pre>
<p>のように、<strong>対象の列を決めてから使う</strong>ほうがミスに気づきやすいです。</p>
<h2><span id="toc12">where()・mask()・replace()・fillna()・locの使い分け</span></h2>
<p><code>where()</code>や<code>mask()</code>で迷う理由は、似たような処理をするメソッドが多いからです。</p>
<p>ここでは、初心者が特に迷いやすいメソッドを整理します。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">やりたいこと</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">向いている方法</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を残したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>where()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上だけ残す</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を置き換えたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>mask()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">120歳超をNaNにする</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">特定の値そのものを置き換えたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>replace()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>"未入力"</code>を<code>NaN</code>にする</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">すでにある欠損値を埋めたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>fillna()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>NaN</code>を0で埋める</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件に合う行を取り出したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件抽出・<code>loc</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">売上が10000以上の行を抽出する</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件に合う場所へ代入したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>loc</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">売上が0未満の行だけ0を代入する</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件に応じて新しい列を作りたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>np.where()</code>、<code>assign()</code>、<code>loc</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">合格・不合格列を作る</td>
</tr>
</tbody>
</table>
<p>この記事では、中心を<code>where()</code>と<code>mask()</code>に絞ります。<br/>
<code>replace()</code>は値そのものの置換、<code>fillna()</code>は欠損値を埋める処理、<code>loc</code>は行・列を指定する処理として分けて考えると整理しやすくなります。</p>
<h2><span id="toc13">locでの条件代入との違い</span></h2>
<p><code>loc</code>を使っても、条件に合う行だけ値を変更できます。</p>
<p>たとえば、売上が0未満の値を0にするなら、次のように書けます。</p>
<pre class="line-numbers"><code class="language-python">df_loc = df.copy()

df_loc.loc[df_loc["売上"] &lt; 0, "売上"] = 0

df_loc[["名前", "売上"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td></tr></tbody></table>
<p><code>loc</code>は、<strong>条件に合う行と列を指定して、そこへ直接代入する</strong>イメージです。</p>
<p>一方、<code>where()</code>は「条件を満たす値を残し、それ以外を置き換えた結果を作る」イメージです。</p>
<pre class="line-numbers"><code class="language-python">df_where = df.copy()

df_where["売上"] = df_where["売上"].where(df_where["売上"] &gt;= 0, other=0)

df_where[["名前", "売上"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td></tr></tbody></table>
<p>どちらも同じ結果にできますが、初心者のうちは次のように考えるとよいです。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">方法</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">向いている場面</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>loc</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件に合う行・列を明示して代入したい</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>where()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を残し、それ以外をまとめて置き換えたい</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>mask()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値をまとめて置き換えたい</td>
</tr>
</tbody>
</table>
<p>この記事の主役は<code>where()</code>と<code>mask()</code>なので、<code>loc</code>の詳細は別記事で学ぶのがおすすめです。</p>
<h2><span id="toc14">新しい列として結果を残すと確認しやすい</span></h2>
<p>初心者のうちは、いきなり元の列を上書きするより、<strong>新しい列として結果を残す</strong>ほうが確認しやすいです。</p>
<p>たとえば、売上の元データを残したまま、確認用の列を作ると、処理前後を並べて比較できます。</p>
<pre class="line-numbers"><code class="language-python">df_check = df.copy()

df_check["売上_修正案"] = df_check["売上"].where(df_check["売上"] &gt;= 0, other=0)
df_check["年齢_確認用"] = df_check["年齢"].mask(df_check["年齢"] &gt; 120)

df_check[["名前", "売上", "売上_修正案", "年齢", "年齢_確認用"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上_修正案</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">年齢</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">年齢_確認用</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">24</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">24.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">-500</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">31</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">31.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">135</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">28</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">28.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">42</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">42.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">19</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">19.0</td></tr></tbody></table>
<p>このように、元の列と処理後の列を並べると、どの値が変わったのかを確認しやすくなります。</p>
<p>特に、公開データや実務データでは、いきなり上書きすると元の状態が分からなくなることがあります。<br/>
最初は新しい列に結果を保存し、問題なければ上書きする流れがおすすめです。</p>
<h2><span id="toc15">よくあるミス1：代入しないと元のDataFrameは変わらない</span></h2>
<p><code>where()</code>や<code>mask()</code>は、実行しただけでは元のDataFrameを自動で書き換えません。</p>
<p>次のコードでは、<code>where()</code>の結果を表示しているだけなので、元の<code>df["売上"]</code>は変わりません。</p>
<pre class="line-numbers"><code class="language-python">df["売上"].where(df["売上"] &gt;= 0, other=0)

df[["名前", "売上"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">-500</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td></tr></tbody></table>
<p>元のDataFrameを変更したい場合は、次のように代入します。</p>
<pre class="line-numbers"><code class="language-python">df_update = df.copy()

df_update["売上"] = df_update["売上"].where(df_update["売上"] &gt;= 0, other=0)

df_update[["名前", "売上"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">売上</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">12000</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">18500</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">9200</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">15000</td></tr></tbody></table>
<p><code>where()</code>や<code>mask()</code>で処理した結果を残したい場合は、<strong>新しい列に入れるか、元の列に代入する</strong>必要があります。</p>
<h2><span id="toc16">よくあるミス2：条件式の向きが逆になる</span></h2>
<p><code>where()</code>と<code>mask()</code>で一番多いミスは、条件式の向きを逆にしてしまうことです。</p>
<p>たとえば、「60点以上だけ残したい」のに、次のように書くと意図と逆になります。</p>
<pre class="line-numbers"><code class="language-python">wrong = pd.DataFrame({
    "名前": df["名前"],
    "点数": df["点数"],
    "意図と逆になりやすい例": df["点数"].where(df["点数"] &lt; 60)
})

wrong</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">意図と逆になりやすい例</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr></tbody></table>
<p>上の例では、<code>df["点数"] &lt; 60</code>という条件を書いているため、60点未満の値が残っています。</p>
<p>「60点以上だけ残したい」なら、条件は次のように書きます。</p>
<pre class="line-numbers"><code class="language-python">correct = pd.DataFrame({
    "名前": df["名前"],
    "点数": df["点数"],
    "60点以上だけ残す": df["点数"].where(df["点数"] &gt;= 60)
})

correct</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">60点以上だけ残す</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">NaN</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60.0</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73.0</td></tr></tbody></table>
<p><code>where()</code>では、<strong>残したい条件を書く</strong>と覚えると、条件式の向きを間違えにくくなります。</p>
<p>逆に、<code>mask()</code>では、<strong>置き換えたい条件を書く</strong>と考えると分かりやすいです。</p>
<h2><span id="toc17">条件に合わない値をNaNにしたあとの流れ</span></h2>
<p><code>where()</code>や<code>mask()</code>で値を<code>NaN</code>にしたあと、そのまま終わりではありません。</p>
<p><code>NaN</code>にしたあとは、目的に応じて次の処理につながります。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">次にしたいこと</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">使う方法</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">欠損値の数を確認したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>isnull().sum()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">欠損値を0や平均値で埋めたい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>fillna()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">欠損値を含む行を削除したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>dropna()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">集計したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>groupby()</code>、<code>value_counts()</code></td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">分布を確認したい</td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">ヒストグラム、箱ひげ図</td>
</tr>
</tbody>
</table>
<p>ここでは、年齢が120歳を超える値を<code>NaN</code>にしたあと、欠損値の数を確認してみます。</p>
<pre class="line-numbers"><code class="language-python">age_checked = df["年齢"].mask(df["年齢"] &gt; 120)

age_checked.isnull().sum()</code></pre>
<pre class="colab-output">np.int64(1)</pre>
<p>このように、<code>where()</code>や<code>mask()</code>は「欠損値を作る」ことがあります。<br/>
そのため、後続の<code>fillna()</code>や<code>dropna()</code>、集計・可視化とセットで考えると、データ分析の流れがつかみやすくなります。</p>
<h2><span id="toc18">np.where()には軽く触れる程度でよい</span></h2>
<p>条件に応じて値を変える方法として、<code>np.where()</code>もよく見かけます。</p>
<p>ただし、初心者が最初に学ぶ場合は、まず<code>pandas</code>の<code>where()</code>と<code>mask()</code>で、<strong>残す条件・置き換える条件</strong>の考え方を理解するのがおすすめです。</p>
<p><code>np.where()</code>は、たとえば「合格」「不合格」のような新しい列を作るときに便利です。</p>
<pre class="line-numbers"><code class="language-python">import numpy as np

df_np = df.copy()
df_np["判定"] = np.where(df_np["点数"] &gt;= 60, "合格", "再確認")

df_np[["名前", "点数", "判定"]]</code></pre>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"></th><th style="white-space: nowrap; padding: 0.2em 0.4em;">名前</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">点数</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">判定</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">0</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">田中</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">82</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">合格</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">1</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">佐藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">55</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">再確認</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">2</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">鈴木</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">91</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">合格</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">3</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">高橋</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">47</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">再確認</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">4</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">伊藤</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">60</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">合格</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">5</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">山本</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">73</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">合格</td></tr></tbody></table>
<p>ここでは、<code>np.where()</code>の詳細には深入りしません。</p>
<p>この記事では、次のように整理しておけば十分です。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;">
<thead>
<tr>
<th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">方法</th>
<th style="white-space: nowrap; padding: 0.2em 0.4em;">まず覚える使いどころ</th>
</tr>
</thead>
<tbody>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>where()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を残す</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>mask()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を置き換える</td>
</tr>
<tr>
<td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>np.where()</code></td>
<td style="white-space: nowrap; padding: 0.2em 0.4em;">条件に応じて新しい配列・列を作る</td>
</tr>
</tbody>
</table>
<p>新しい列の作り方を詳しく学びたい場合は、条件付き列追加の記事と合わせて学ぶと理解しやすくなります。</p>
<h2><span id="toc19">データ分析の流れではどこで使うか</span></h2>
<p><code>where()</code>と<code>mask()</code>は、単独で覚えるよりも、データ分析の流れの中で考えると使いどころが見えやすくなります。</p>
<p>たとえば、次のような流れです。</p>
<ol>
<li>CSVやExcelを読み込む</li>
<li><code>head()</code>で先頭を確認する</li>
<li><code>info()</code>や<code>describe()</code>で型・欠損値・統計量を確認する</li>
<li><code>unique()</code>や<code>value_counts()</code>で不自然な値を見つける</li>
<li><code>replace()</code>で表記ゆれを直す</li>
<li><code>where()</code>や<code>mask()</code>で条件に合わない値を整理する</li>
<li><code>fillna()</code>で欠損値を補う</li>
<li><code>groupby()</code>やグラフで集計・可視化する</li>
</ol>
<p>つまり、<code>where()</code>と<code>mask()</code>は、<strong>値を確認したあと、集計や可視化に進む前の前処理</strong>として使うと自然です。</p>
<p>特に、外れ値や不自然な値をそのまま集計すると、平均値やグラフが読みにくくなることがあります。<br/>
その前に、どの値を残し、どの値を確認対象にするかを整理するのが大切です。</p>
<h2><span id="toc20">まとめ</span></h2>
<p>この記事では、<code>pandas</code>の<code>where()</code>と<code>mask()</code>の使い方を解説しました。</p>
<p>ポイントは次のとおりです。</p>
<table class="wp-block-table" style="width: auto; border-collapse: collapse;"><thead><tr><th style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">ポイント</th><th style="white-space: nowrap; padding: 0.2em 0.4em;">内容</th></tr></thead><tbody><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>where()</code></td><td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を残す</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>mask()</code></td><td style="white-space: nowrap; padding: 0.2em 0.4em;">条件を満たす値を置き換える</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>other</code></td><td style="white-space: nowrap; padding: 0.2em 0.4em;">条件に合わない場合、または条件に合う場合の置き換え値を指定する</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;">条件式の考え方</td><td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>where()</code>は残したい条件、<code>mask()</code>は置き換えたい条件を書く</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>replace()</code>との違い</td><td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>replace()</code>は特定の値そのものを置き換える</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>fillna()</code>との違い</td><td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>fillna()</code>はすでにある欠損値を埋める</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>loc</code>との違い</td><td style="white-space: nowrap; padding: 0.2em 0.4em;"><code>loc</code>は条件に合う行・列を指定して代入する</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>np.where()</code>との違い</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">条件に応じて新しい列を作るときに使われやすい</td></tr><tr><td style="min-width: 3em; white-space: nowrap; padding: 0.2em 0.4em;"><code>NaN</code>にしたとき</td><td style="white-space: nowrap; padding: 0.2em 0.4em;">整数列が<code>82.0</code>のように小数表示になることがある</td></tr></tbody></table>
<p><code>where()</code>と<code>mask()</code>は、条件に応じて値を残す・置き換えるための前処理で役立ちます。</p>
<p>最初は難しく感じるかもしれませんが、次の2つだけ覚えておけば大丈夫です。</p>
<ul>
<li><strong>残したい条件を書くなら<code>where()</code></strong></li>
<li><strong>置き換えたい条件を書くなら<code>mask()</code></strong></li>
</ul>
<p>この考え方を押さえると、条件に応じた値の整理がかなり分かりやすくなります。</p>
<h2><span id="toc21">次に読みたい関連記事</span></h2>
<p>今回の記事とあわせて読むと、Pandasの前処理の流れがつかみやすくなります。</p>
<ul>
<li><a href="https://pythondatalab.com/pandas-info-describe/">Pandas info()とdescribe()の違い｜欠損値・型・統計量の見方を例で解説</a></li>
<li><a href="https://pythondatalab.com/pandas-replace/">pandas replace()の使い方｜値の置換・表記ゆれ・欠損値変換を解説</a></li>
<li><a href="https://pythondatalab.com/pandas-fillna/">pandas fillna()の使い方｜欠損値を0・平均値・中央値・最頻値で埋める方法を初心者向けに解説</a></li>
<li><a href="https://pythondatalab.com/pandas-filtering/">pandas 条件抽出（filtering）入門｜AND/OR・query関数・複数条件の指定方法</a></li>
<li><a href="https://pythondatalab.com/pandas-loc/">【初心者向け】Pandasのlocで行や列をラベルで抽出する基本操作をやさしく解説【図解あり】</a></li>
<li><a href="https://pythondatalab.com/pandas-value-counts/">pandas value_counts()の使い方｜件数集計・割合表示・欠損値の数え方を解説</a></li>
</ul>
<!-- ▼▼▼ カテゴリから探す　 共通スタイル（カテゴリ）▼▼▼ -->
<style> .related-box { border: 2px solid #0073aa; border-radius: 10px; padding: 1em 1.2em; margin-top: 2em; background: #f8faff; } .related-box h3 { margin-top: 0; color: #0073aa; } .related-box ul { list-style-type: none; margin: 0; padding: 0; } .related-box li { margin: 0.4em 0; } .related-box a { text-decoration: none; color: #333; } .related-box a:hover { text-decoration: underline; color: #0073aa; } </style> <div class="related-box"> <h3><span id="toc22"> カテゴリから探す</span></h3> <ul>
<ul>
<li><a href="https://pythondatalab.com/category/pandas/basic/">◀ Pandas 基礎</a></li>
<li><a href="https://pythondatalab.com/category/pandas/preprocessing/">◀ Pandas 抽出・前処理</a></li>
<li><a href="https://pythondatalab.com/category/pandas/aggregation/">◀ Pandas 集計・変形</a></li>
<li><a href="https://pythondatalab.com/category/pandas/visualization/">▶ Matplotlib　可視化</a></li> </ul> </ul></div>
<!-- ▼▼▼ カテゴリから探す　共通スタイル（カテゴリ）終了▼▼▼ -->
<p style="text-align: center; margin-top: 2em;"><a href="#top">▲ ページトップへ戻る</a></p>
<script>Prism.highlightAll();</script>
</div>


<div id="rank-math-faq" class="rank-math-block">
<div class="rank-math-list ">
<div id="faq-question-1778074181310" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc23">where()とmask()の違いは何ですか？</span></h3>
<div class="rank-math-answer ">

<p><code>where()</code>は、条件を満たす値を残し、条件を満たさない値を置き換えます。<br /><code>mask()</code>は逆に、条件を満たす値を置き換えます。<br />迷ったときは、<code>where()</code>は「残したい条件」、<code>mask()</code>は「置き換えたい条件」を書くと考えると分かりやすいです。</p>

</div>
</div>
<div id="faq-question-1778074208970" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc24">where()とreplace()はどう使い分けますか？</span></h3>
<div class="rank-math-answer ">

<p><code>replace()</code>は、特定の値そのものを置き換えるときに向いています。<br />たとえば、<code>"未入力"</code>を<code>NaN</code>にしたい場合は<code>replace()</code>が分かりやすいです。<br />一方、<code>60点未満</code>や<code>0未満</code>のように、条件式で判断したい場合は<code>where()</code>や<code>mask()</code>が向いています。</p>

</div>
</div>
<div id="faq-question-1778074229954" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc25">where()とlocで条件代入する方法は何が違いますか？</span></h3>
<div class="rank-math-answer ">

<p><code>loc</code>は、条件に合う行と列を指定して代入する方法です。<br /><code>where()</code>は、条件を満たす値を残し、条件を満たさない値を置き換えた結果を作る方法です。<br />どちらでも同じ結果を作れる場面はあります。<br />初心者のうちは、行・列を指定して変更したいなら<code>loc</code>、値を条件に応じて残す・置き換えるなら<code>where()</code>や<code>mask()</code>と考えると整理しやすいです。</p>

</div>
</div>
<div id="faq-question-1778074251258" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc26">where()で元のDataFrameが変わらないのはなぜですか？</span></h3>
<div class="rank-math-answer ">

<p><code>where()</code>を実行しただけでは、元のDataFrameは自動で書き換わりません。<br />処理結果を残したい場合は、次のように代入します。<br /><code>df["列名"] = df["列名"].where(条件, other=置き換える値)</code></p>
<p>元データを残したい場合は、新しい列に保存すると確認しやすいです。</p>

</div>
</div>
<div id="faq-question-1778074268378" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc27">条件に合わない値をNaNにするにはどうすればよいですか？</span></h3>
<div class="rank-math-answer ">

<p><code>where()</code>で<code>other</code>を指定しなければ、条件を満たさない値は<code>NaN</code>になります。<br /><code>df["点数"].where(df["点数"] &gt;= 60)</code></p>
<p>この例では、60点以上はそのまま残り、60点未満は<code>NaN</code>になります。</p>

</div>
</div>
<div id="faq-question-1778074293682" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc28">np.where()とpandasのwhere()はどちらを使えばよいですか？</span></h3>
<div class="rank-math-answer ">

<p>まずは、<code>pandas</code>の<code>where()</code>と<code>mask()</code>で考え方を理解するのがおすすめです。<br />・条件を満たす値を残したい → <code>where()</code><br />・条件を満たす値を置き換えたい → <code>mask()</code><br />・条件に応じて新しい列を作りたい → <code>np.where()</code>も候補<br /><code>np.where()</code>は便利ですが、この記事では詳しい使い方には深入りしません。</p>

</div>
</div>
<div id="faq-question-1778074311090" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc29">複数条件でもwhere()は使えますか？</span></h3>
<div class="rank-math-answer ">

<p>使えます。<br />複数条件を使う場合は、各条件を<code>()</code>で囲み、AND条件は<code>&amp;</code>でつなぎます。<br /><code>df["点数"].where((df["点数"] &gt;= 60) &amp; (df["点数"] &lt;= 90))</code></p>
<p>ただし、複数条件は初心者が混乱しやすいため、最初は単一条件で<code>where()</code>と<code>mask()</code>の考え方を理解するのがおすすめです。</p>

</div>
</div>
<div id="faq-question-1778074342986" class="rank-math-list-item">
<h3 class="rank-math-question "><span id="toc30">fillna()とは何が違いますか？</span></h3>
<div class="rank-math-answer ">

<p><code>fillna()</code>は、すでにある<code>NaN</code>を0や平均値などで埋めるメソッドです。<br />一方、<code>where()</code>や<code>mask()</code>は、条件に応じて値を<code>NaN</code>にしたり、別の値に置き換えたりできます。<br />流れとしては、<code>where()</code>や<code>mask()</code>で確認が必要な値を<code>NaN</code>にし、そのあと必要に応じて<code>fillna()</code>で補う、という使い方があります。</p>

</div>
</div>
</div>
</div><p>&lt;p&gt;The post <a rel="nofollow" href="https://pythondatalab.com/pandas-where-mask/">pandas where()・mask()の使い方｜条件に応じて値を残す・置き換える方法</a> first appeared on <a rel="nofollow" href="https://pythondatalab.com">Python Data Lab（Pythonデータラボ）</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://pythondatalab.com/pandas-where-mask/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【初心者向け】Google Colabの始め方を画像付きで解説！Pythonの実行環境をやさしく紹介</title>
		<link>https://pythondatalab.com/python-install/</link>
					<comments>https://pythondatalab.com/python-install/#respond</comments>
		
		<dc:creator><![CDATA[coin_collector]]></dc:creator>
		<pubDate>Sat, 22 Mar 2025 05:36:00 +0000</pubDate>
				<category><![CDATA[Python実行環境・設定]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>  Pythonの開発環境にはいくつか選択肢がありますが、まず私は手軽に始められるGoogle Colaboratory（Colab）を使っています。本記事では、Googleアカウント・Google Driveの準備から [&#8230;]</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://pythondatalab.com/python-install/">【初心者向け】Google Colabの始め方を画像付きで解説！Pythonの実行環境をやさしく紹介</a> first appeared on <a rel="nofollow" href="https://pythondatalab.com">Python Data Lab（Pythonデータラボ）</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<div id="top"> </div>
<p><!-- WordPress用に最適化されたHTML構成 --></p>
<p><!-- インラインスタイルや幅指定をレスポンシブ対応へ変更 --></p>
<div>
<p>Pythonの開発環境にはいくつか選択肢がありますが、まず私は手軽に始められる<br /><strong style="background-color: #fcff01;">Google Colaboratory（Colab）</strong>を使っています。<br />本記事では、Googleアカウント・Google Driveの準備から、Colabを使ってPythonを実行する方法を画像付きで解説します。</p>
<p><em>私自身まだ勉強中ですが、これから始める方の参考になれば嬉しいです。</em><br /><span style="color: #ff0000;">【体験談】最初は環境構築にすごく時間がかかると思い込んでいたのですが、Colabなら本当に5分でPythonを動かせて驚きました。</span></p>
</div>
<p>Pythonを始めるには「Google Colab」「Anaconda（Jupyter Notebook）」「直接インストール」の3つの主な方法があります。</p>
<p><em>ちなみに、私自身、最初はどれを使えばいいか迷ったので、同じような方の参考になればと思いまとめてみました。</em><br /><span style="color: #ff0000;">【失敗談】Anacondaをインストールしたものの、容量が大きすぎてPCが重くなり、結局Colabに乗り換えました。</span></p>
<p><strong>※ なお、初心者向けに補足も入れています。</strong></p>
<table class="env-table" style="width: 100%; border-collapse: collapse;">
<thead>
<tr style="background-color: #f7f7f7;">
<th>環境</th>
<th>メリット</th>
<th>デメリット</th>
</tr>
</thead>
<tbody>
<tr style="background-color: #f0fff0;">
<td><strong>Google Colab</strong><br /><small>（ブラウザ上で動く）</small><br /><span style="color: #2e7d32; font-weight: bold;">★ 初心者におすすめ</span></td>
<td>・インストール不要、ブラウザですぐ使える<br />・無料でGPUが使える（※1）<br />・Google Driveと連携しやすい<br />・Jupyter Notebook形式なので学習サイトとも相性が良い</td>
<td>・インターネット接続が必須<br /><span style="color: #ff0000;">【体験談】Wi-Fiが不安定なカフェで使ったら接続切れになって焦りました。</span><br />・セッションが12時間で自動終了（※2）<br /><span style="color: #ff0000;">【失敗談】作業中に自動切断されて保存しておらず、データが消えたことがあります。こまめな保存を意識しましょう！</span><br />・高度なカスタマイズやローカル接続には制限がある</td>
</tr>
<tr>
<td><strong>Anaconda（Jupyter）</strong><br /><small>（PCにインストール）</small></td>
<td>・豊富なライブラリが最初から入っている<br />・オフラインでも使える<br />・仮想環境（env）をGUIで簡単に管理できる</td>
<td>・初回インストール容量が大きい（3〜5GB）<br /><span style="color: #ff0000;">【体験談】インストールに1時間以上かかって驚きました。ストレージに注意です。</span><br />・PCの性能に依存（特にGPUを使う処理）<br />・不要な環境を残すとディスク容量を消費しやすい</td>
</tr>
<tr>
<td><strong>直接インストール</strong><br /><small>（公式Pythonから）</small></td>
<td>・最小構成で軽量、必要なものだけ導入可能<br />・開発環境の柔軟なカスタマイズが可能<br />・エンジニア向けの本格的な環境構築ができる</td>
<td>・初心者にはやや難易度が高い（※3）<br />・仮想環境の知識が必要（venvやpyenvなど）<br />・ライブラリ管理やトラブル対処がすべて自己責任</td>
</tr>
</tbody>
</table>
<p style="font-size: small;"><strong>※1：</strong> Colabの無料版でも「ランタイムの変更」でGPUが使えますが、利用時間に制限があります。<br /><strong>※2：</strong> セッションは一定時間で自動切断されるため、大規模な処理には向きません（Pro版で延長可能）。<br /><strong>※3：</strong> Pythonやパソコンの仕組みに慣れている方向けの構成です。初心者はColabまたはAnacondaがおすすめです。</p>
<p><!-- 以下略：ステップ形式以降は元HTML構成のまま適用可能 --></p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-3" checked><label class="toc-title" for="toc-checkbox-3">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Google Colabの使い方（ステップ形式で解説）</a><ol><li><a href="#toc2" tabindex="0">ステップ①：Googleアカウントを取得</a></li><li><a href="#toc3" tabindex="0">ステップ②：Google Driveにアクセス</a></li><li><a href="#toc4" tabindex="0">ステップ③：Google DriveからColabを起動</a></li><li><a href="#toc5" tabindex="0">ステップ④：Colabノートブックの操作画面</a></li><li><a href="#toc6" tabindex="0">ステップ⑤：Pythonコードを実行してみる</a></li><li><a href="#toc7" tabindex="0">ステップ⑥：データ分析や学習用途に活用しよう</a><ol><li><a href="#toc8" tabindex="0">🔰 pandas・NumPyとは？（初心者向け補足）</a></li></ol></li></ol></li><li><a href="#toc9" tabindex="0">✅ まとめ</a></li></ol>
    </div>
  </div>

<h2 style="text-align: left;"><span id="toc1">Google Colabの使い方（ステップ形式で解説）</span></h2>
<h3><span id="toc2">ステップ①：Googleアカウントを取得</span></h3>
<p style="font-size: medium;">Google Colabを利用するには、Googleアカウントが必要です。まだ持っていない方は<br /><a rel="noopener" href="https://www.google.com/intl/ja/account/about/" target="_blank">こちら</a>から作成してください。</p>
<p style="font-size: medium;"><span style="color: #ff0000;">【体験談】私は学習専用のサブアカウントを作ったところ、データ管理が非常に楽になりました。</span></p>
<h3><span id="toc3">ステップ②：Google Driveにアクセス</span></h3>
<p style="font-size: medium;">Colabノートブックの保存先となる<br /><a rel="noopener" href="https://drive.google.com/drive/home?hl=ja" target="_blank">Google Drive</a><br />にログインします。</p>
<div><img decoding="async" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVu-aXL1dRPfZC5qLmYN0mDDOgKBNhA6JxnidNuPa0C-ZB2mQTdviNm0vXmUQ-caoayP9G5Vzrg1cjcFkeq7gmVh2guNsijnlzLVCeH8BPPPtDSM108pgw4hnrpyA6mLsb6GWlI977-gGHmi3XVbtqAMm07CZeBL7RhXKUjyhVXKqD2hqJOx5Ccf7nwHwy/w556-h392/googledrive.png" alt="Google Drive画面" width="556" /></div>
<h3><span id="toc4">ステップ③：Google DriveからColabを起動</span></h3>
<p style="font-size: medium;">Google Driveの「＋新規」→「その他」→「Google Colaboratory」を選びます。</p>
<p style="font-size: medium;"><span style="color: #ff0000;">【失敗談】最初Colabが表示されず戸惑いましたが、拡張機能追加で簡単に出せました！</span></p>
<div><img decoding="async" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNBZ2ZPScPY_aPw3WHD76ptNwKFAFFQn8xcE6teCDLLHb1PxPr8IAZHB8iXo4urerZxNuLVog3QdcKgRrBol8bVpecMRpkR7JOZhniz-RRjOxrhptZd1fLjLJqtVXsrosTm8LW3jfRF_p-xXgwiWWaB8jNmuLLJ6QrzQHSN08l2ZUG1rJ-Otr3fNzOHBEn/w557-h398/googlecolaboratory.png" alt="Google Colaboratory起動画面" width="557" /></div>
<h3><span id="toc5">ステップ④：Colabノートブックの操作画面</span></h3>
<p style="font-size: medium;">Colabを起動するとノートブック形式の編集画面が出ます。セルにコードを入力してすぐ実行できます。</p>
<h3><span id="toc6">ステップ⑤：Pythonコードを実行してみる</span></h3>
<p style="font-size: medium;">セルに<code>1 + 1</code>と入力して「Shift + Enter」を押すと、下に<code>2</code>と表示されます。</p>
<p style="font-size: medium;"><span style="color: #ff0000;">【体験談】たった「1+1」が表示されただけでも、自分の手でPythonを動かせた感動を今でも覚えています。</span></p>
<div><img decoding="async" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-woPamRmAteIKAHPH84k-KH6mO-PMUIBCsluaUz16QEXVgWRtlQDjIgnk1PMLFj2mHzOu3iPvOycb2jtnq6xnAYW-BNq66t0QlwiMjndtJlNZckrLUMbKqR0bfif1RFy0yub5aFwm-wn_SyYFERtzdFp9l3rCDYEsC7rsVyae-n1k6cj5rgim25XN7sfP/w558-h321/python.png" alt="Pythonコード実行イメージ" width="558" /></div>
<h3><span id="toc7">ステップ⑥：データ分析や学習用途に活用しよう</span></h3>
<p style="font-size: medium;">ColabはJupyter互換なので、<a href="#pandas-numpy">pandas</a>や<a href="#pandas-numpy">NumPy</a>などもすぐ使えます。</p>
<p style="font-size: medium;"><span style="color: #ff0000;">【失敗談】ライブラリインポートを忘れてエラー連発したので、必ず<code>import</code>文を書くクセをつけましょう。</span></p>
<h4 id="pandas-numpy"><span id="toc8">🔰 pandas・NumPyとは？（初心者向け補足）</span></h4>
<p style="font-size: medium;">Pythonでデータ分析を行うときによく使われるのが、<code>pandas</code>と<code>NumPy</code>というライブラリです。<br />ここでは初心者の方に向けて、それぞれの役割を簡単に紹介します。</p>
<ul style="font-size: medium;">
<li><strong>pandas（パンダス）</strong>：<br />表形式（Excelのような行と列）のデータを扱うためのライブラリです。<br />データの読み込み・加工・集計・フィルタリングなどが簡単に行えます。<br /><span style="color: #ff0000;">例：CSVファイルを読み込んで、必要な行だけ抽出する</span></li>
<li><strong>NumPy（ナンパイ）</strong>：<br />数値計算に特化したライブラリで、ベクトルや行列といった数学的なデータ処理を高速に行えます。<br />pandasの内部でもNumPyが使われており、データ分析の土台となる重要なツールです。<br /><span style="color: #ff0000;">例：大量の数値データを使った統計処理や機械学習の基礎</span></li>
</ul>
<p style="font-size: medium;">Google Colabでは、次のようにライブラリをインポートして使い始めます。</p>
<pre><code>import pandas as pd
import numpy as np</code></pre>
<p style="font-size: medium;">このコードは、それぞれのライブラリに<code>pd</code>や<code>np</code>という省略名をつけて使いやすくするための書き方です。<br />ほとんどのチュートリアルや学習書籍でもこの形式が使われています。</p>
<p style="font-size: medium;">「まだよくわからない」と感じても心配ありません。<br />まずは「よく出てくる名前」くらいの認識で十分です。<br />これらのライブラリについては、今後の記事で詳しく取り上げる予定です。</p>
<h2><span id="toc9">✅ まとめ</span></h2>
<div style="background-color: #f9f9f9; border-left: 5px solid #4caf50; padding: 1em; font-size: medium;">
<ul style="list-style-type: square; margin-left: 1em;">
<li>Pythonの実行環境にはColab・Anaconda・直接インストールの3つの選択肢があります</li>
<li><strong>Google Colab</strong>はブラウザだけで使える手軽さが魅力で、<span style="color: #4caf50;">初心者に特におすすめ</span></li>
<li><strong>Anaconda</strong>は本格的な分析・開発環境構築向け</li>
<li><strong>直接インストール</strong>は自由度が高い分、やや中上級者向け</li>
<li>まずはColabで成功体験を積み、その後他の環境にステップアップしましょう</li>
</ul>
<p><span style="color: #ff0000;">【まとめ体験談】最初は不安でもColabを使ったおかげで、Python学習のハードルがぐっと下がりました。</span></p>
</div>
<div class="related-articles">
<p>▶ 関連記事もあわせてご覧ください：</p>
<ul>
<li><a href="https://pythondatalab.com/pandas-read-csv/" target="_blank">pandas Google ColabとDriveで簡単CSV操作｜pandasでの読み込み・保存を初心者向けに解説</a></li>
<li><a href="https://pythondatalab.com/pandas-dataframe-series/" target="_blank">Pandas DataFrame入門：構造・作り方・使い方・Seriesとの違いを初心者向けにわかりやすく解説</a></li>
</ul>
</div>
<p><!-- ブログカード --><br /><a href="https://pythondatalab.com/google-colab-csv/" title="Google ColabでCSVを読み込む方法｜Drive連携とpandas read_csvを初心者向けに解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-160x90.png 160w, https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-300x169.png 300w, https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-1024x576.png 1024w, https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-768x432.png 768w, https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-1536x864.png 1536w, https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-120x68.png 120w, https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv-320x180.png 320w, https://pythondatalab.com/wp-content/uploads/2026/05/google-colab-csv.png 1672w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Google ColabでCSVを読み込む方法｜Drive連携とpandas read_csvを初心者向けに解説</div><div class="blogcard-snippet internal-blogcard-snippet">Google ColabでCSVを読み込む方法を初心者向けに解説。Google Driveのマウント、ファイルパス確認、pandas read_csvでのCSV読み込み、読み込めないときの対処法、CSV保存までわかりやすく説明します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://pythondatalab.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">pythondatalab.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.03.23</div></div></div></div></a></p>
<div class="related-articles">
<p><!-- トップページに戻る --></p>
<p style="text-align: center; margin-top: 2em;"><a href="#top">▲ ページトップへ戻る</a></p>
</div>


<p class="wp-block-paragraph"></p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://pythondatalab.com/python-install/">【初心者向け】Google Colabの始め方を画像付きで解説！Pythonの実行環境をやさしく紹介</a> first appeared on <a rel="nofollow" href="https://pythondatalab.com">Python Data Lab（Pythonデータラボ）</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://pythondatalab.com/python-install/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ブログを今日から始めます</title>
		<link>https://pythondatalab.com/brog-start/</link>
					<comments>https://pythondatalab.com/brog-start/#respond</comments>
		
		<dc:creator><![CDATA[coin_collector]]></dc:creator>
		<pubDate>Sat, 08 Mar 2025 11:12:00 +0000</pubDate>
				<category><![CDATA[Python実行環境・設定]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>ブログでPythonの勉強内容などを書いていくつもりです。 時間のあるときにでもご覧になっていただけると嬉しいです。 よろしくお願いいたします。 ▲ ページトップへ戻る</p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://pythondatalab.com/brog-start/">ブログを今日から始めます</a> first appeared on <a rel="nofollow" href="https://pythondatalab.com">Python Data Lab（Pythonデータラボ）</a>.&lt;/p&gt;</p>
]]></description>
										<content:encoded><![CDATA[<p>ブログでPythonの勉強内容などを書いていくつもりです。</p>
<p>時間のあるときにでもご覧になっていただけると嬉しいです。</p>
<p>よろしくお願いいたします。</p>
<article><!-- ② 関連記事セクション --></p>
</article>
<p style="text-align: center; margin-top: 2em;"><a href="#top">▲ ページトップへ戻る</a></p>
<p>&lt;p&gt;The post <a rel="nofollow" href="https://pythondatalab.com/brog-start/">ブログを今日から始めます</a> first appeared on <a rel="nofollow" href="https://pythondatalab.com">Python Data Lab（Pythonデータラボ）</a>.&lt;/p&gt;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://pythondatalab.com/brog-start/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
