簡體   English   中英

如果列中超過 90% 的值是 0,則刪除 Dataframe 中的列

[英]Drop columns in Dataframe if more than 90% of the values in the column are 0's

我有一個 dataframe,它看起來像這樣: 在此處輸入圖像描述

如您所見,第三列和第四列有很多 0。 如果這些值的 90% 以上為 0,我需要刪除這些列。

首先,下次請給出示例數據集,而不是圖像或副本。 最好給出一個重現問題的最小示例(這也是調查問題的好方法)。 例如,這個 df 可以解決問題:

df = pd.DataFrame.from_dict({
    'a':[1,0,0,0,0,0,0,0,0,0,0],
    'b':[1,1,1,0,1,0,0,0,0,0,0]})

現在,先前的答案有所幫助,但如果您可以避免循環,則最好。 你可以寫一些更簡單、更簡潔的東西來解決這個問題:

df.drop(columns=df.columns[df.eq(0).mean()>0.9])

讓我們一步一步來:
df.eq(0)在每個單元格中返回True \\ False
.mean()方法將 True 視為 1,將 False 視為 0,因此將該均值與 0.9 進行比較就是您想要的。
在這些地方調用df.columns[...]將只返回那些>0.9地方,而drop只是丟棄它們。

以下應該為您解決問題:

row_count = df.shape[0]
columns_to_drop = []

for column, count in df.apply(lambda column: (column == 0).sum()).iteritems():
    if count / row_count >= 0.9:
        columns_to_drop.append(column)

df = df.drop(columns_to_drop, axis=1, inplace=True)
bad_col = []
for i, x in enumerate(df.columns):
    if sorted(list(df[x].value_counts(normalize = True).values))[-1] >= 0.9 :
        bad_col.append(x)

解釋內聯代碼。

#Suppose df is your DataFrame then execute the following code.

df_float=df.loc[:, df.dtypes == np.float64] #checks if the column contains numbers

for i in df_float.columns:
    if ((len(df_float[i].loc[df_float[i]==0])/len(df_float))>0.9): #checking if 90% data is zero
        df_float.drop(i,axis=1,inplace=True) #delete the column

#Your results are stored in df_float

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM