df = pd.DataFrame({"A":["a","aaa","aa","a",None],"B":["b","bbb","b","b", None],"C":[None, "cc", None, None, "c"], "D": [None, None, None, "dd", None]}) # create the test dataframe
df = df.dropna(subset=["C","D"], how="all") # drop rows from the C and D subset if all are null
正如注解所建议的那样,如果您想将其作为一个函数
def drop_unwanted(exclude_columns,df):
df = df.dropna(subset=[x for x in df.columns if x not in exclude_columns], how="all")
return df
filtered_df = df[~df.loc[:, 'C':].isna().all(axis=1)]
print(filtered_df)
# Output
A B C D
1 aaa bbb cc None
3 a b None dd
4 None None c None
也可以使用drop:
filtered_df = df.drop(df.loc[:, 'C':].isna().all(axis=1).loc[lambda x: x].index)
print(filtered_df)
# Output
A B C D
1 aaa bbb cc None
3 a b None dd
4 None None c None
3条答案
按热度按时间nszi6y051#
Pandas有一个函数drop_na,您可以给予它的一个子集(在本例中为列C和D)https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html
我会这样做:
正如注解所建议的那样,如果您想将其作为一个函数
并将您要排除的列指定给函数!
wz3gfoph2#
IIUC,这里有一个带有 boolean indexing 的选项:
输出:
6ie5vjzr3#
你可以使用
loc
对 Dataframe 进行切片,并使用布尔掩码来选择正确的行:也可以使用
drop
: