事象 : notna
でNaNではないインデックスでデータを抽出しようとしたら怒られた
- 環境
- macOS Catalina バージョン10.15.7
- Python 3.8.5
- pandas 1.1.3
import pandas
if __name__ == '__main__':
df = pandas.read_csv('CSV.csv')
print(df[df.query('名前 == "ぽんすけ"')['開始'].notna()])
エラーメッセージ
pandas.core.indexing.IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
原因 : 不明
抽出しようとしているDataFrameのインデックス分のインデックスがnotna
の結果にないから?
誰か教えて欲しい。
# 抽出しようとしているDataFrameのインデックスは0~39までの40ある
print(df)
# 名前 回数 開始 終了
# 0 ぽんすけ 1 9:00 18:00
# ...省略...
# 39 ぽんすけ 10 NaN NaN
# notnaの結果のインデックスは抜け番がいっぱいで10しかない
print(df.query('名前 == "ぽんすけ"')['開始'].notna())
# 0 True
# 2 True
# 5 True
# 11 True
# 14 False
# 21 True
# 24 True
# 29 False
# 34 True
# 39 False
# Name: 開始, dtype: bool
notna
の結果のインデックスに合うDataFrameから抽出すればなんとかなりそう
# notnaの結果のインデックスに合うDataFrame
print(df.query('名前 == "ぽんすけ"'))
# 名前 回数 開始 終了
# 0 ぽんすけ 1 9:00 18:00
# 2 ぽんすけ 3 9:00 13:00
# 5 ぽんすけ 7 12:00 NaN
# 11 ぽんすけ 5 9:00 NaN
# 14 ぽんすけ 4 NaN NaN
# 21 ぽんすけ 2 18:00 NaN
# 24 ぽんすけ 6 18:00 NaN
# 29 ぽんすけ 9 NaN 18:00
# 34 ぽんすけ 8 12:00 NaN
# 39 ぽんすけ 10 NaN NaN
対応 : notnaの結果のインデックスに合うDataFrameから抽出する
import pandas
if __name__ == '__main__':
df = pandas.read_csv('CSV.csv')
ponsuke = df.query('名前 == "ぽんすけ"')
print(ponsuke[ponsuke['開始'].notna()])
できた
名前 回数 開始 終了
0 ぽんすけ 1 9:00 18:00
2 ぽんすけ 3 9:00 13:00
5 ぽんすけ 7 12:00 NaN
11 ぽんすけ 5 9:00 NaN
21 ぽんすけ 2 18:00 NaN
24 ぽんすけ 6 18:00 NaN
34 ぽんすけ 8 12:00 NaN