条件に応じて値を列に挿入
条件に当てはまる行に、それぞれ別の値を入れます。購入額でランクを付ける、コードを読める名前に置き換える、といった使い方をします。Excel の IF 関数を重ねた処理にあたります。
全行に同じ値を入れるだけなら値を列に挿入を使ってください。
SQLビルダーにも同じ名前の機能がありますが、書ける条件の種類が違います。SQLビルダーで使うときは条件に応じて値を列に挿入を見てください。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
Spark エンジンでも動きます。
設定項目
- 結果の挿入先を設定
- 新規列に挿入(既定)か既存列に上書き。新規列なら新規列名を入力、上書きなら列を選択が続けて出ます。
- 新規列名必須
- 「新規列に挿入」のときに出ます。既にある列と同じ名前は付けられません(エラーで止まります)。
- 列を選択必須
- 「既存列に上書き」のときに出ます。元の値は消えます。
- 条件と挿入値の設定
- フォームには 設定 ボタンだけが出ます。押すと条件と挿入値の設定というダイアログが開き、そこで条件と入れる値の組を作ります(→ 条件と挿入値の設定ダイアログ)。
- 結果を挿入する列型を指定する
- on にすると型を選べます。off のときは入れる値から自動で決まります。
- 型を選択
- 文字列 / 数値 / 日付 / 日付時間 / 時間。
- 型変更不可エラーを無視する
- 型を指定したときに出ます。on にすると、変換できない値が空欄になります。off だとエラーで止まります。
条件と挿入値の設定ダイアログ
設定 ボタンで開きます。上から 条件 1 / 条件 2 … と並び、最後に すべての条件に一致しない場合 の行があります。頭には 設定内の参照列(n 列) として、条件と挿入値で使っている列が出ます。
1 つの条件
- 対象列を選択
- 条件を当てる列。選んだ列の型で、下に出る欄がまるごと変わります。
- 比較タイプを選択
- 選べる種類は列の型で変わります(下の表)。
- 条件値を設定
- 比べる値。固定値と列のどちらでも入れられます。欄を開くと列の値から選ぶの群が出るので別の列を選べ、文字を打てば「「◯◯」をそのまま使う」が出て固定値になります。
いずれかに等しい(in)などの複数指定と、欠損値を含まない/欠損値を含むでは列を使えません。 - 始点を設定 / 終点を設定 / 不等号選択
範囲指定のときに出ます。不等号は始 < 値 < 終/始 ≦ 値 < 終/始 < 値 ≦ 終/始 ≦ 値 ≦ 終の 4 通りです。- 日付要素を選択
- 日付系の列のときに出ます。年 / 月 / 日 / 年-月-日 / 年-月 / 曜日 / 時 / 分 / 秒 / 時:分:秒 / 年-月-日 時:分:秒 から、どの単位で比べるかを選びます。
- 曜日を選択
- 日付要素に「曜日」を選んだときに出ます。月〜日から選びます。
- 挿入する値
- 条件に当てはまった行に入れる値。固定値と列のどちらでも入れられます。条件値の欄と同じで、開くと列の値から選ぶの群が出ます。
比較タイプは列の型で変わります。
| 対象列の型 | 選べる比較タイプ |
|---|---|
| 数値 / 日付 / 日付時間 / 時間 | 等しい(=) / 等しくない(!=) / より小さい(<) / 以下(<=) / より大きい(>) / 以上(>=) / いずれかに等しい(in) / いずれとも等しくない(not in) / 範囲指定 / 欠損値を含まない / 欠損値を含む の 11 種 |
| 文字列 | 等しい(=) / 等しくない(!=) / いずれかに等しい(in) / いずれとも等しくない(not in) / 文字を含む(grep) / 文字を含まない(ungrep) / [条件値]から始まる(starts_with) / [条件値]で終わる(ends_with) / 正規表現にマッチ / 欠損値を含まない / 欠損値を含む の 11 種 |
| 日付要素に「曜日」 | 等しい(=) / 等しくない(!=) / いずれかに等しい(in) / いずれとも等しくない(not in) の 4 種だけ |
| 日付要素に「年-月-日 時:分:秒」 | 上の 11 種から いずれかに等しい(in) / いずれとも等しくない(not in) を除いた 9 種 |
条件を増やす・並べ替える
各行の操作メニューから次ができます。
| 操作 | すること |
|---|---|
| 条件の追加 | 新しい条件を下に足す |
| 条件の複製 | その条件をまるごと写す |
| and条件の追加 | その条件に and でつなぐ条件を足す |
| and条件として複製 | and でつなぐ形で写す |
| 上へ移動 / 下へ移動 | 評価の順を入れ替える(→ 条件は上から順に見る) |
| 削除 | その条件を消す |
条件は上から順に見る
先に書いた条件が優先されます。 ある行が複数の条件に当てはまる場合、最初に当てはまった条件の値が入ります。
100000 以上 → A、50000 以上 → B の順に書けば、12 万円の行は A になります。逆の順に書くと、12 万円の行も B になってしまいます。範囲を区切るときは、狭い方・大きい方から書いてください。
入れる値は列からも取れる
入れる値は、固定の文字や数値のほか、別の列の値にもできます。
「条件に当てはまる行だけ、別の列の値で置き換える」という使い方ができます。当てはまらない行は元のまま、という形も作れます。
出力の型
「結果を挿入する列型を指定する」が off のときは、データを見る前に、設定した値だけから型が決まります。条件に当たる行が 1 行もなくても型は同じです。
| 入れる値 | 決まる型 |
|---|---|
| 固定値がすべて数値 | 数値 |
| 固定値に数値でないものが混ざる | 文字列 |
| すべて列から取り、その列の型が 1 種類 | その型 |
| 固定値と列、あるいは型の違う列が混ざる | 文字列 |
| すべて空欄 | 文字列 |
型を明示すると、変換できない値があったときにエラーで止まります。空欄にして進めたいときは「型変更不可エラーを無視する」を on にします。
エラーと対処
列を選んでいない
入れる値に別の列を使う設定にしたのに、その列を選んでいないとき。「既存列に上書き」で上書き先の列を選んでいない場合や、選んでいた列が前の処理でなくなった場合にも出ます。
対象の列が選択されていません。
直し方 — 列を選び直してください。固定の値でよいなら、列を使う設定を off にします。
新規列名が既にある
「新規列に挿入」で、入力データに同じ名前の列があるとき。
新規列名(
{{new_col}})が既存の列名と重複しています。
{{new_col}} のところには、入力した新規列名がそのまま出ます。
直し方 — 別の名前を付けるか、「既存列に上書き」に切り替えてください。
数値として読めない値がある
型に数値を指定したが、入れる値が数値にできないとき。
数値型以外のデータが含まれています。「型変更不可エラーを無視する」オプションを有効にするか、データを修正してください。
直し方 — 入れる値を見直すか、「型変更不可エラーを無視する」を on にします。on にすると、変換できなかった行は空欄になります。
日付として読めない値がある
型に日付 / 日付時間を指定したが、入れる値がその形で読めないとき。読めなかった値がメッセージに出ます。
値:
{{value}}が入力された日付フォーマットで読み込めませんでした。フォーマットを見直すか、「型変更不可エラーを無視する」オプションを有効にするか、データを修正してください。参考: https://octopus.nehan.io/manual/1152/
{{value}} のところには、読めなかった値がそのまま出ます。日付は 2024-04-01、日付時間は 2024-04-01 13:05:30 の形で入れてください。
直し方 — 入れる値を見直すか、「型変更不可エラーを無視する」を on にします。読める形に直せないなら、型を指定せずに文字列のまま出して列の型変更で形式を指定します。
時間として読めない値がある
型に時間を指定したが、入れる値が時間として読めないとき。
日付型、日付時間型、時間型以外のデータが含まれています。「型変更不可エラーを無視する」オプションを有効にするか、列に入っている日付を「日付フォーマットを指定」で指定してください。
直し方 — 13:05:30 の形で入れてください。読めない値を残したいなら「型変更不可エラーを無視する」を on にします。
扱える範囲の外の日付
型に日付・日付時間を指定し、列の型変更で扱える範囲から外れた日付を入れたとき。
以下の列に、nehanで扱えない日付が含まれています。
このあとに、範囲から外れた列の名前が並びます。
直し方 — 範囲に収まる日付を入れるか、型を文字列にします。
よく使う例
1. 購入額でランクを付ける
お題 — 10 万円以上を A、5 万円以上を B、それ以外を C
入力 — 購入額 が 120000 / 60000 / 3000 の 3 行
設定
- 結果の挿入先「新規列に挿入」、新規列名
ランク - 条件 1「
購入額が 100000 以上」→A - 条件 2「
購入額が 50000 以上」→B - どれにも当てはまらない行 →
C
出力 — ランク が A / B / C になる
注意 — 条件の順番が逆だと、12 万円の行も B になります
2. コードを読める名前にする
お題 — 1 / 2 / 3 を 東日本 / 西日本 / その他 にしたい
入力 — 地域コード が 1 / 2 / 3
設定 — 結果の挿入先「既存列に上書き」で 地域コード を選び、条件を 3 つ作る
出力 — 地域コード が 東日本 / 西日本 / その他 に置き換わる。列は増えない
3. フラグを立てる
お題 — 条件に当てはまる行に 1、それ以外に 0 を入れたい
入力 — 購入額 が 120000 / 3000
設定 — 新規列名 対象フラグ、条件「購入額 が 50000 以上」→ 1、それ以外 → 0、型は数値
出力 — 対象フラグ が 1 / 0 の数値列。そのまま合計すれば件数が出る
4. 一部の行だけ別の列の値で置き換える
お題 — 住所が空欄の行だけ、旧住所 列の値を使いたい
入力 — 住所 が空欄の行と埋まっている行、どちらにも 旧住所 がある
設定 — 結果の挿入先「既存列に上書き」で 住所、条件「住所 が欠損値を含む」→ 列 旧住所、それ以外 → 列 住所
出力 — 空欄だった行だけ 旧住所 の値で埋まり、他の行は元のまま
5. 計算の前に欠損を埋める
お題 — 空欄を 0 にしてから合計したい
入力 — 売上 が 100 / 空欄 / 300
設定 — 既存列に上書きで 売上、条件「売上 が欠損値を含む」→ 0、それ以外 → 列 売上、型は数値
出力 — 売上 が 100 / 0 / 300 になり、合計が出せる
注意 — 空欄を埋めるだけなら欠損値処理の方が簡単です