Pandas: データフレームについて--10: データの置換

# データの置換

欠損値 `NaN` の置換については， 「Pandas: データフレームについて--02: 欠損値の扱い」を参照のこと。 


```python
import pandas as pd
df = pd.DataFrame({
    'a': [1, 2, 3, 4, 5],
    'b': [1.2, 3.4, 5.6, 7.8, 9.0]
})
df
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>a</th>
      <th>b</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>1</td>
      <td>1.2</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2</td>
      <td>3.4</td>
    </tr>
    <tr>
      <th>2</th>
      <td>3</td>
      <td>5.6</td>
    </tr>
    <tr>
      <th>3</th>
      <td>4</td>
      <td>7.8</td>
    </tr>
    <tr>
      <th>4</th>
      <td>5</td>
      <td>9.0</td>
    </tr>
  </tbody>
</table>
</div>



## 1.　条件式が `True` の場合に，指定した値で置き換える

    Usage: mask(cond, other=nan, inplace=False, axis=None,
                level=None, errors='raise', try_cast=<no_default>)


```python
df['a'].mask(df['b'] > 4, 999)
```




    0      1
    1      2
    2    999
    3    999
    4    999
    Name: a, dtype: int64



## 2.　条件式が `False` の場合に，指定した値で置き換える

    Usage: where(cond, other=nan, inplace=False, axis=None,
                 level=None, errors='raise', try_cast=<no_default>)


```python
df['a'].where(df['b'] > 4, 999)
```




    0    999
    1    999
    2      3
    3      4
    4      5
    Name: a, dtype: int64



## 3.　指定した値を置き換える

    Usage: replace(to_replace=None, value=None, inplace: 'bool' = False,
                   limit=None,regex: 'bool' = False, method: 'str' = 'pad') 


```python
df.replace([1, 3, 7.8], 999)
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>a</th>
      <th>b</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>999</td>
      <td>1.2</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2</td>
      <td>3.4</td>
    </tr>
    <tr>
      <th>2</th>
      <td>999</td>
      <td>5.6</td>
    </tr>
    <tr>
      <th>3</th>
      <td>4</td>
      <td>999.0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>5</td>
      <td>9.0</td>
    </tr>
  </tbody>
</table>
</div>



指定した列だけを対象にする場合


```python
df.replace({'b': {3.4: 888, 7.8: 777}})
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>a</th>
      <th>b</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>1</td>
      <td>1.2</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2</td>
      <td>888.0</td>
    </tr>
    <tr>
      <th>2</th>
      <td>3</td>
      <td>5.6</td>
    </tr>
    <tr>
      <th>3</th>
      <td>4</td>
      <td>777.0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>5</td>
      <td>9.0</td>
    </tr>
  </tbody>
</table>
</div>



## 4.　もっと知りたい人

    help(df.mask)    # Help on method mask in module pandas.core.frame
    help(df.where)   # Help on method where in module pandas.core.frame
    help(df.replace) # Help on method replace in module pandas.core.frame