use*_*260 0 python apply pandas
某些数据帧列df的元素等于"?" 字符.df有2000行.我想删除超过1800个元素等于"?"的列.
我想我需要使用apply方法来确定需要删除哪些列,然后使用drop方法删除它们,但我无法弄清楚如何.
df.drop(df.apply(lambda x: x.value_counts()["?"]>1800 ,axis=0))
Run Code Online (Sandbox Code Playgroud)
但显然它不起作用.以上这行不是我尝试的第一件事.我也尝试了很多其他的东西,但它们都给了我不同的错误.我感谢任何帮助.
你不一定要使用apply方法和value_counts; 检查相等性和总和可以在这里做同样的事情,并且可能更有效:
df.eq("?").sum()
Run Code Online (Sandbox Code Playgroud)
给出?每列中的数量:
df.eq("?").sum().gt(1800)
Run Code Online (Sandbox Code Playgroud)
给出一个布尔系列,如果列有超过1800个问号,则标记为True,这可以进一步用于数据框的子集loc; 所以放在一起:
df.loc[:,~df.eq("?").sum().gt(1800)]
Run Code Online (Sandbox Code Playgroud)
要使用drop方法,您需要确保传入的是标签或列名列表而不是布尔系列,并且还要删除列,您需要将axis参数指定为1,以便使原始答案工作:
df.drop(df.apply(lambda x: x.value_counts()["?"]>1800)[lambda x: x].index, axis=1)
# ^^^^^^^^^^^^^
# here use a lambda filter to extract column names that need to be dropped
Run Code Online (Sandbox Code Playgroud)