ここ数ヶ月、Pythonでデータ集計・分析を始めましたsakaimoです。
さっそく空文字の判定でミスりましたのでメモっておきます。
- 前処理として特定の列には「文字列あるいは空文字」が入ってることは保証されている状態。
- そこの値が「空文字」かどうかの判定をさせたい。
test_df = pd.DataFrame(
data={'文字列が入る列': pd.Series(['a', '', 'c'])}
)
print(test_df)
print("--------")
moji = test_df.iloc[1,0]
# 何も表示されない。空文字なので期待値通り。
print("moji: " + moji)
# Falseになる。pandasのisnull()では「空文字」は「欠損値ではない」。欠損値とはNaNとかNaneのこと。
print("pd.isnull(moji): " + str(pd.isnull(moji)))
# Falseになる。pythonの仕様では 空文字はFalse判定
print("not moji: " + str(bool(moji)))
出力
文字列が入る列
0 a
1
2 c
--------
moji:
pd.isnull(moji): False
not moji: False
私は下記のように書いていて、なんでここに来ないの?ってしばらく考えちゃいました。
if pd.isnull(moji):
print("空文字だったときの処理") # ←ダメな例
当たり前なのですが、その言語仕様やライブラリによって「何がTrue/Falseと判定されるのか」をちゃんと調べなきゃダメですね。