问题描述
我有一个9列(长的隐秘列名)和约1000行的数据框。我只想删除/删除第2列和第3列中的值为NaN的行。
我知道有DataFrame.dropna(subset=[])
,但是我不想按标签而是按位置选择列。
有办法吗?重命名列是没有选择的。
我的解决方案:
df.dropna(subset=df.columns[[2,3]],how='all')
编辑: 这是我数据框的一些行:(重要的列是温度和事件)
Datum Zeit Zeitzone \
Anz.
926 2019-09-17 09:00:00 GMT+02:00
927 2019-09-17 10:00:00 GMT+02:00
928 2019-09-17 11:00:00 GMT+02:00
929 2019-09-17 12:00:00 GMT+02:00
930 2019-09-17 13:00:00 GMT+02:00
931 2019-09-17 13:10:32 GMT+02:00
932 2019-09-17 13:11:21 GMT+02:00
933 2019-09-17 13:11:41 GMT+02:00
934 2019-09-17 13:11:42 GMT+02:00
935 2019-09-17 13:11:53 GMT+02:00
Temp.,°C (LGR S/N: 20009596,SEN S/N: 20009596,LBL: 1m) \
Anz.
926 12.401
927 13.942
928 15.760
929 15.569
930 15.187
931 NaN
932 NaN
933 NaN
934 NaN
935 NaN
Event,units (LGR S/N: 20009596,LBL: 0,2 mm Niederschlag) \
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 163.0
932 NaN
933 NaN
934 NaN
935 163.0
Notiz Koppler verbunden (LGR S/N: 20009596) \
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 NaN
932 Protokolliert
933 NaN
934 Protokolliert
935 NaN
Koppler abgetrennt (LGR S/N: 20009596) \
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 NaN
932 NaN
933 Protokolliert
934 NaN
935 NaN
Host verbunden (LGR S/N: 20009596) Angehalten (LGR S/N: 20009596) \
Anz.
926 NaN NaN
927 NaN NaN
928 NaN NaN
929 NaN NaN
930 NaN NaN
931 NaN NaN
932 NaN NaN
933 NaN NaN
934 Protokolliert NaN
935 NaN Protokolliert
Dateiende (LGR S/N: 20009596)
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 NaN
932 NaN
933 NaN
934 NaN
935 Protokolliert
这就是我想要的样子(我离开了索引以使其更加可见):
Datum Zeit Zeitzone \
Anz.
926 2019-09-17 09:00:00 GMT+02:00
927 2019-09-17 10:00:00 GMT+02:00
928 2019-09-17 11:00:00 GMT+02:00
929 2019-09-17 12:00:00 GMT+02:00
930 2019-09-17 13:00:00 GMT+02:00
931 2019-09-17 13:10:32 GMT+02:00
935 2019-09-17 13:11:53 GMT+02:00
Temp.,LBL: 1m) \
Anz.
926 12.401
927 13.942
928 15.760
929 15.569
930 15.187
931 NaN
935 NaN
Event,2 mm Niederschlag) \
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 163.0
935 163.0
Notiz Koppler verbunden (LGR S/N: 20009596) \
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 NaN
935 NaN
Koppler abgetrennt (LGR S/N: 20009596) \
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 NaN
935 NaN
Host verbunden (LGR S/N: 20009596) Angehalten (LGR S/N: 20009596) \
Anz.
926 NaN NaN
927 NaN NaN
928 NaN NaN
929 NaN NaN
930 NaN NaN
931 NaN NaN
935 NaN Protokolliert
Dateiende (LGR S/N: 20009596)
Anz.
926 NaN
927 NaN
928 NaN
929 NaN
930 NaN
931 NaN
935 Protokolliert
解决方法
与其删除不需要的行,不如保留想要的行:
df[df.iloc[:,[2,3]].notnull().all(axis=1)]
但是按索引获取列名有什么问题呢?
df.dropna(subset=df.columns[[2,3]])