首页 > 解决方案 > 在 Pandas 的列中删除具有空值的索引

问题描述

尝试删除与多级索引中的索引有关的空值

我正在尝试删除“数据”列中包含任何空值的所有 ID(索引级别 1)。

例如,我在下面创建了一个示例数据框:

import pandas as pd
import numpy as np

ids = ['0', '0', '0', '0', '0', '1','1','1','1','1','2','2','2','2','2','3','3','3','3','3']
dates = ['1/1/21', '1/2/21', '1/3/21', '1/4/21', '1/5/21','1/1/21', '1/2/21', '1/3/21', '1/4/21', '1/5/21','1/1/21', '1/2/21', '1/3/21', '1/4/21', '1/5/21','1/1/21', '1/2/21', '1/3/21', '1/4/21', '1/5/21']
data = [np.nan, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, np.nan, 16, 17, 18, 19]

df = pd.DataFrame(data=data, index=[ids,dates], columns=['Data'])

我希望清理数据框以有效地仅返回与 ID 为 1 或 2 相关的行,因为这些是索引第二级中任何日期的唯一没有空值的 ID。

我试过df.dropna(subset=['Data'], inplace=True)了,但这只会删除具有空值的行,而不是整个索引。

如果 Pandas Dataframe 中的任何行具有空值,那么删除与索引有关的所有行的最佳方法是什么?

标签: pythonpandasdataframe

解决方案


识别具有任何 NaN 的 andex 并过滤掉相反的内容

df.groupby(level=0).filter(lambda x:~(x.isna().any()))

正如@sammywemmy 所建议的那样,还可以过滤没有NaNsusing的组x.notna().all()。代码如下;

df.groupby(level=0).filter(lambda x: (x.notna().all()))




          Data
1 1/1/21   5.0
  1/2/21   6.0
  1/3/21   7.0
  1/4/21   8.0
  1/5/21   9.0
2 1/1/21  10.0
  1/2/21  11.0
  1/3/21  12.0
  1/4/21  13.0
  1/5/21  14.0

推荐阅读