【问题标题】:How to drop rows in a df based on NaN values in specific columns not using column names but integer position for the subset?如何根据特定列中的 NaN 值而不使用列名而是子集的整数位置来删除 df 中的行?
【发布时间】:2021-02-07 12:31:07
【问题描述】:

我有一个包含 9 列(长而神秘的列名)和约 1000 行的数据框。我只想删除/删除第 2 列和第 3 列中的值为 NaN 的行。

我知道有DataFrame.dropna(subset=[]),但我不想按标签而是按位置选择列。

有办法吗?重命名列是没有选择的。

我的解决方案: df.dropna(subset=df.columns[[2,3]], how='all')


编辑: 这是我的数据框的一些行:(重要的列是 Temp. 和 Event)

              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  

【问题讨论】:

  • 请始终在您的问题中包含示例 DataFrame 以及所需结果的示例。您应该能够使用 df.iloc[:, [0,1]] 选择列
  • @B.Bogart 我包含了数据框。我知道如何使用 iloc 选择列,我只是不知道如何删除仅基于这些列的行。请阅读我的问题。

标签: python-3.x pandas position nan drop


【解决方案1】:

不要删除您不想要的行,而是尝试保留您想要的行:

df[df.iloc[:,[2,3]].notnull().all(axis=1)]

但是按索引获取列名有什么问题?

df.dropna(subset=df.columns[[2,3]])

【讨论】:

  • 我尝试了这两个代码,但结果是一个空白数据框(只有标题)
  • 我修改了第二个提案并且成功了:df.dropna(subset=df.columns[[2,3]], how='all')
猜你喜欢
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多