【Python】Pandasにlistを格納して欠損値判定

プログラム

PandasのDataFrameで欠損値かどうかを確認して欠損値である場合、
listを格納していくプログラムを組んでました。
すでにlistが入っている場合、入っているlistに追加していきます。
その際に、欠損値の確認ではエラーが起きたので少しだけ手間取りましたので
メモします。

まずはPandasをimportします。

import pandas as pd

空のDataFrameを作成します。

df_test = pd.DataFrame(columns=['name', 'list'])
df_test['name'] = ['aaa']
df_test
--------------------------------------------------
	名前	都県
0	aaa		NaN

欠損値ではないときに使うlistを作成します。

kanto = ['茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県']
shutoken = ['東京都', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '神奈川県', '山梨県']

isna()で欠損値であることを確認し、listを格納します。

if pd.isna(df_test['都県'][0]) == True:
    print('欠損値であることを確認')
    df_test['都県'][0] = kanto
    
df_test
--------------------------------------------------
欠損値であることを確認
	名前	都県
0	aaa	[茨城県, 栃木県, 群馬県, 埼玉県, 千葉県, 東京都, 神奈川県]

次に欠損値ではないことを確認し、list_2と結合します。

if pd.isna(df_test['list'][0]) == False:
    print('入力済みであることを確認')
    df_test['list'][0] = set(df_test['list'][0] + shutoken)

df_test
--------------------------------------------------
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

ValueErrorとなり、複数の要素を持つ配列の真理値は曖昧とエラーが返ってきました。
比較演算子を使わずに出力してみると、

pd.isna(df_test['都県'][0])
--------------------------------------------------
array([False, False, False, False, False, False, False])

arrayでFalseが返ってきてました。
格納したのはlistなので、listであるかどうかを判定基準にして出力させてみました。

if type(df_test['都県'][0]) == list:
    df_test['都県'][0] = list(set(df_test['都県'][0] + shutoken))

df_test
--------------------------------------------------
	名前	都県
0	aaa	[栃木県, 群馬県, 神奈川県, 茨城県, 千葉県, 山梨県, 埼玉県, 東京都]

listに山梨県が追加され、listが結合されたことが確認できました。
プログラミングに不慣れなので結構簡単に躓きます。

タイトルとURLをコピーしました