如何根据特定列中的 NaN 值删除 df 中的行,而不是使用列名而是子集的整数位置?
How to drop rows in a df based on NaN values in specific columns not using column names but integer position for the subset?
我有一个包含 9 列(长而神秘的列名称)和约 1000 行的数据框。我只想 drop/delete 第 2 列和第 3 列中的值为 NaN 的行。
我知道有 DataFrame.dropna(subset=[])
但我不想 select 按标签而是按位置的列。
有办法吗?无法重命名列。
我的解决方案:
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, SEN 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., °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
935 NaN
Event, units (LGR S/N: 20009596, SEN S/N: 20009596, LBL: 0,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]])
我有一个包含 9 列(长而神秘的列名称)和约 1000 行的数据框。我只想 drop/delete 第 2 列和第 3 列中的值为 NaN 的行。
我知道有 DataFrame.dropna(subset=[])
但我不想 select 按标签而是按位置的列。
有办法吗?无法重命名列。
我的解决方案:
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, SEN 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., °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
935 NaN
Event, units (LGR S/N: 20009596, SEN S/N: 20009596, LBL: 0,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]])