[Python]Pandasで小数点の連番を振る

## はじめに
こんばんは
簡単ですがpandasのデータフレームで
小数点の連番(シーケンス)を振りたかったので振りました。
ちょろっと調べてもそれっぽいのが出てこなかったので記事にしておきます。
(簡単すぎて誰も記事にしないのかも。。。)

環境はgoogle colabです。
結果は[Gist](https://gist.github.com/mototoke/4f59296c8bb16a5cf6bc6c86198555c6)にも上げてます。

# pandasのversion確認
```python:
# version確認
import pandas as pd
pd.__version__
>> '1.1.5'
```

```python:
import pandas as pd
import numpy as np
# データフレーム作成
df = pd.DataFrame(np.arange(100).reshape(100, 1),
                  columns=['No'],)
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>No</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>1</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2</td>
    </tr>
    <tr>
      <th>3</th>
      <td>3</td>
    </tr>
    <tr>
      <th>4</th>
      <td>4</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
    </tr>
    <tr>
      <th>95</th>
      <td>95</td>
    </tr>
    <tr>
      <th>96</th>
      <td>96</td>
    </tr>
    <tr>
      <th>97</th>
      <td>97</td>
    </tr>
    <tr>
      <th>98</th>
      <td>98</td>
    </tr>
    <tr>
      <th>99</th>
      <td>99</td>
    </tr>
  </tbody>
</table>
<p>100 rows × 1 columns</p>
</div>

# pandasで連番を作成
```python:
# pandasで連番を作成
pd_seq = pd.RangeIndex(start=0, stop=len(df.index), step=1)

# 新しい列を追加
df['PD_SEQ'] = pd_seq
# 連番列の型をfloatにして100で割る
df['PD_SEQ'] = df['PD_SEQ'].astype('float64') / 100

df['PD_SEQ']
```

    0    0.0000000000
    1    0.0100000000
    2    0.0200000000
    3    0.0300000000
    4    0.0400000000
             ...     
    95   0.9500000000
    96   0.9600000000
    97   0.9700000000
    98   0.9800000000
    99   0.9900000000
    Name: PD_SEQ, Length: 100, dtype: float64

# numpyで連番を作成
```python:
# numpyで連番を作成
np_seq = np.arange(0, 1, 0.01)
df['NP_SEQ'] = np_seq

print(np_seq)

df['NP_SEQ']
```

    [0.   0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1  0.11 0.12 0.13
     0.14 0.15 0.16 0.17 0.18 0.19 0.2  0.21 0.22 0.23 0.24 0.25 0.26 0.27
     0.28 0.29 0.3  0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4  0.41
     0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5  0.51 0.52 0.53 0.54 0.55
     0.56 0.57 0.58 0.59 0.6  0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69
     0.7  0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8  0.81 0.82 0.83
     0.84 0.85 0.86 0.87 0.88 0.89 0.9  0.91 0.92 0.93 0.94 0.95 0.96 0.97
     0.98 0.99]

    0    0.0000000000
    1    0.0100000000
    2    0.0200000000
    3    0.0300000000
    4    0.0400000000
             ...     
    95   0.9500000000
    96   0.9600000000
    97   0.9700000000
    98   0.9800000000
    99   0.9900000000
    Name: NP_SEQ, Length: 100, dtype: float64



# 非推奨：自前で作成
  小数点の計算誤差が出るのでしない方がいいです。(例：0.35000000000000003)
  numpyとかを使いましょう

```python:
# 非推奨：自前で作成
for_seq = [i*0.01 for i in range(100)]
print(for_seq)

df['FOR_SEQ'] = for_seq
df['FOR_SEQ']
```

    [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, 0.31, 0.32, 0.33, 0.34, 0.35000000000000003, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41000000000000003, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47000000000000003, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.5700000000000001, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.6900000000000001, 0.7000000000000001, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8, 0.81, 0.8200000000000001, 0.8300000000000001, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.9400000000000001, 0.9500000000000001, 0.96, 0.97, 0.98, 0.99]

    0    0.0000000000
    1    0.0100000000
    2    0.0200000000
    3    0.0300000000
    4    0.0400000000
             ...     
    95   0.9500000000
    96   0.9600000000
    97   0.9700000000
    98   0.9800000000
    99   0.9900000000
    Name: FOR_SEQ, Length: 100, dtype: float64



# 小数点設定変更(桁数：2)
  pandasの小数点表示を変更してデータフレームを確認します

```python:
# 小数点設定変更
pd.options.display.precision = 2
pd.options.display.float_format = '{:.2f}'.format

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>No</th>
      <th>PD_SEQ</th>
      <th>NP_SEQ</th>
      <th>FOR_SEQ</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>0</td>
      <td>0.00</td>
      <td>0.00</td>
      <td>0.00</td>
    </tr>
    <tr>
      <th>1</th>
      <td>1</td>
      <td>0.01</td>
      <td>0.01</td>
      <td>0.01</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2</td>
      <td>0.02</td>
      <td>0.02</td>
      <td>0.02</td>
    </tr>
    <tr>
      <th>3</th>
      <td>3</td>
      <td>0.03</td>
      <td>0.03</td>
      <td>0.03</td>
    </tr>
    <tr>
      <th>4</th>
      <td>4</td>
      <td>0.04</td>
      <td>0.04</td>
      <td>0.04</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>95</th>
      <td>95</td>
      <td>0.95</td>
      <td>0.95</td>
      <td>0.95</td>
    </tr>
    <tr>
      <th>96</th>
      <td>96</td>
      <td>0.96</td>
      <td>0.96</td>
      <td>0.96</td>
    </tr>
    <tr>
      <th>97</th>
      <td>97</td>
      <td>0.97</td>
      <td>0.97</td>
      <td>0.97</td>
    </tr>
    <tr>
      <th>98</th>
      <td>98</td>
      <td>0.98</td>
      <td>0.98</td>
      <td>0.98</td>
    </tr>
    <tr>
      <th>99</th>
      <td>99</td>
      <td>0.99</td>
      <td>0.99</td>
      <td>0.99</td>
    </tr>
  </tbody>
</table>
<p>100 rows × 4 columns</p>
</div>



# 小数点設定変更(桁数：20)
  20桁までいくと計算誤差が見えます
  ここだけ見ると全部同じ結果になってる模様
  そりゃそうか

```python:
# 小数点設定変更
pd.options.display.precision = 20
pd.options.display.float_format = '{:.20f}'.format

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>No</th>
      <th>PD_SEQ</th>
      <th>NP_SEQ</th>
      <th>FOR_SEQ</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>0</td>
      <td>0.00000000000000000000</td>
      <td>0.00000000000000000000</td>
      <td>0.00000000000000000000</td>
    </tr>
    <tr>
      <th>1</th>
      <td>1</td>
      <td>0.01000000000000000021</td>
      <td>0.01000000000000000021</td>
      <td>0.01000000000000000021</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2</td>
      <td>0.02000000000000000042</td>
      <td>0.02000000000000000042</td>
      <td>0.02000000000000000042</td>
    </tr>
    <tr>
      <th>3</th>
      <td>3</td>
      <td>0.02999999999999999889</td>
      <td>0.02999999999999999889</td>
      <td>0.02999999999999999889</td>
    </tr>
    <tr>
      <th>4</th>
      <td>4</td>
      <td>0.04000000000000000083</td>
      <td>0.04000000000000000083</td>
      <td>0.04000000000000000083</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>95</th>
      <td>95</td>
      <td>0.94999999999999995559</td>
      <td>0.95000000000000006661</td>
      <td>0.95000000000000006661</td>
    </tr>
    <tr>
      <th>96</th>
      <td>96</td>
      <td>0.95999999999999996447</td>
      <td>0.95999999999999996447</td>
      <td>0.95999999999999996447</td>
    </tr>
    <tr>
      <th>97</th>
      <td>97</td>
      <td>0.96999999999999997335</td>
      <td>0.96999999999999997335</td>
      <td>0.96999999999999997335</td>
    </tr>
    <tr>
      <th>98</th>
      <td>98</td>
      <td>0.97999999999999998224</td>
      <td>0.97999999999999998224</td>
      <td>0.97999999999999998224</td>
    </tr>
    <tr>
      <th>99</th>
      <td>99</td>
      <td>0.98999999999999999112</td>
      <td>0.98999999999999999112</td>
      <td>0.98999999999999999112</td>
    </tr>
  </tbody>
</table>
<p>100 rows × 4 columns</p>
</div>