- 環境
- macOS Catalina バージョン10.15.7
- Python 3.8.5
- pandas 1.1.3
抽出元のデータはこんなかんじ
df = pandas.read_csv('CSV.csv')
print(df)
出力
名前 回数 開始 終了
0 ぽんすけ 1 9:00 18:00
1 ぽんすけ 2 18:00 NaN
2 ぽんすけ 3 9:00 13:00
3 ぽんすけ 4 NaN NaN
4 ぽんすけ 5 9:00 NaN
5 ぽんすけ 6 18:00 NaN
6 ぽんすけ 7 12:00 NaN
7 ぽんすけ 8 12:00 NaN
8 ぽんすけ 9 NaN 18:00
9 ぽんすけ 10 NaN NaN
1つのカラムがNaNじゃないデータを抽出する
抽出したい データ |
開始 | 終了 |
---|---|---|
x | NaN | NaN |
o | NaNじゃない | NaN |
x | NaN | NaNじゃない |
o | NaNじゃない | NaNじゃない |
方法
# [開始]カラムがNaNのデータを削除する方法
print(df.dropna(subset=['開始']))
# [開始]カラムがNaNではないデータを抽出する方法
print(df[df['開始'].notna()])
# [開始]カラムがNaNではないデータを抽出する方法
print(df.query('開始.notna()', engine='python'))
出力
名前 回数 開始 終了
0 ぽんすけ 1 9:00 18:00
1 ぽんすけ 2 18:00 NaN
2 ぽんすけ 3 9:00 13:00
4 ぽんすけ 5 9:00 NaN
5 ぽんすけ 6 18:00 NaN
6 ぽんすけ 7 12:00 NaN
7 ぽんすけ 8 12:00 NaN
2つのカラム両方NaNじゃないデータを抽出する
抽出したい データ |
開始 | 終了 |
---|---|---|
x | NaN | NaN |
x | NaNじゃない | NaN |
x | NaN | NaNじゃない |
o | NaNじゃない | NaNじゃない |
方法
# [開始]または[終了]カラムのどちらかがNaNのデータを削除する方法
print(df.dropna(subset=['開始', '終了']))
# [開始][終了]カラム両方がNaNではないデータを抽出する方法
print(df.query('開始.notna() & 終了.notna()', engine='python'))
出力
名前 回数 開始 終了
0 ぽんすけ 1 9:00 18:00
2 ぽんすけ 3 9:00 13:00
2つのカラムどっちかがNaNじゃないければデータを抽出する
抽出したい データ |
開始 | 終了 |
---|---|---|
x | NaN | NaN |
o | NaNじゃない | NaN |
o | NaN | NaNじゃない |
o | NaNじゃない | NaNじゃない |
方法
# NaNを空文字にして[開始][終了]カラムをくっつけて空文字ではないデータを抽出する方法
print(df[df['開始'].str.cat(df['終了'], na_rep='') != ''])
# [開始][終了]カラムどちらかがNaNではないデータを抽出する方法
print(df.query('開始.notna() | 終了.notna()', engine='python'))
出力
名前 回数 開始 終了
0 ぽんすけ 1 9:00 18:00
1 ぽんすけ 2 18:00 NaN
2 ぽんすけ 3 9:00 13:00
4 ぽんすけ 5 9:00 NaN
5 ぽんすけ 6 18:00 NaN
6 ぽんすけ 7 12:00 NaN
7 ぽんすけ 8 12:00 NaN
8 ぽんすけ 9 NaN 18:00
「1つのカラムがNaNじゃない」&「1つのカラムがNaN」のデータを抽出する
抽出したい データ |
開始 | 終了 |
---|---|---|
x | NaN | NaN |
x | NaNじゃない | NaN |
o | NaN | NaNじゃない |
x | NaNじゃない | NaNじゃない |
方法
# [開始]カラムがNaNを抽出した後に[終了]カラムがNaNのデータを削除する方法
print(df[df['開始'].isna()].dropna(subset=['終了']))
# [開始]カラムがNaNではない かつ [終了]カラムがNaNのデータを抽出する方法
print(df.query('開始.isna() & 終了.notna()', engine='python'))
出力
名前 回数 開始 終了
8 ぽんすけ 9 NaN 18:00