我有一个数据框,比方说xyz。我编写了代码,以找出数据框中每一列所具有的空值的百分比。我的代码如下:
round(100*(xyz.isnull().sum()/len(xyz.index)), 2)
说我得到了以下结果:
abc 26.63
def 36.58
ghi 78.46
我想删除ghi列,因为它的空值超过70%。
我使用以下代码实现了它:
xyz = xyz.drop(xyz.loc[:,round(100*(xyz.isnull().sum()/len(xyz.index)), 2)>70].columns, 1)
但是,我不明白这段代码是如何工作的,任何人都可以解释一下吗?
答案 0 :(得分:3)
代码正在执行以下操作:
d = dict(zip(*mylist)) # if [[1, 2, 3], ['2000', '2000a', '2000b']]
d = dict(mylist) # if [[1, '2000'], [2, '2000a'], [3,'2000b']]
df['npi'] = df.RPN.map(d).fillna(df.RPN)
# RPN Source city npi
#0 1 netflix baltimore 2000
#1 1 netflix baltimore 2000
#2 2 hulu orlando 2000a
#3 4 hulu houston 4
按行或按列删除给定轴的指定元素。在这种情况下,xyz.drop( [...], 1)
表示您要按第1轴放行,即列
df.drop( ..., 1)
将返回一个列表,其中包含您的切片条件产生的列名
xyz.loc[:, ... ].columns
该指令计算空值的数量,将它们相加并通过行数进行归一化,从而有效计算每一列中round(100*(xyz.isnull().sum()/len(xyz.index)), 2)>70
的百分比。然后,将金额四舍五入为只有2个小数位,最后您返回True,即nan
的数量大于70%。因此,您将获得列与True / False数组之间的映射。
将所有内容放在一起:首先要生成一个布尔数组,该数组标记哪些列的百分比超过nan
,然后使用。nan
,您可以使用布尔索引来仅查看您所查看的列要删除(nan%> 70%),然后使用loc
恢复此类列的名称,然后这些列将由.columns
指令使用。
希望这可以解决所有问题!
答案 1 :(得分:2)
如果您的代码难以理解,则只需用dropna
来检查thresh
,因为pandas
已经涵盖了这种情况。
df=df.dropna(axis=1,thresh=round(len(df)*0.3))