Python 是否删除数据帧中的NaN/NULL列?

Python 是否删除数据帧中的NaN/NULL列?,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我在pandas中有一个dataFrame,其中有几个列的值都为空。是否有一个内置函数可以让我删除这些列?是,dropna。请参阅和DataFrame.dropnadocstring: Definition: DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None) Docstring: Return object with labels on given axis omitted where alternately

我在pandas中有一个
dataFrame
,其中有几个列的值都为空。是否有一个内置函数可以让我删除这些列?

是,
dropna
。请参阅和
DataFrame.dropna
docstring:

Definition: DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None)
Docstring:
Return object with labels on given axis omitted where alternately any
or all of the data are missing

Parameters
----------
axis : {0, 1}
how : {'any', 'all'}
    any : if any NA values are present, drop that label
    all : if all values are NA, drop that label
thresh : int, default None
    int value : require that many non-NA values
subset : array-like
    Labels along other axis to consider, e.g. if you are dropping rows
    these would be a list of columns to include

Returns
-------
dropped : DataFrame
要运行的特定命令为:

df=df.dropna(axis=1,how='all')

用于从数据框中删除所有空列的函数:

def Remove_Null_Columns(df):
    dff = pd.DataFrame()
    for cl in fbinst:
        if df[cl].isnull().sum() == len(df[cl]):
            pass
        else:
            dff[cl] = df[cl]
    return dff 
此函数将从df中删除所有空列。

这是一个简单的函数,您可以通过传递dataframe和threshold直接使用它
现在创建不包括这些列的新dataframe

l = rmissingvaluecol(df,1)
df1 = df[l]
PS:您可以根据需要更改阈值

奖励步骤 您可以找到每列缺失值的百分比(可选)


另一种解决方案是创建一个布尔数据帧,在非空位置具有真值,然后获取至少具有一个真值的列。这将删除具有所有NaN值的列

df = df.loc[:,df.notna().any(axis=0)]
如果要删除至少有一个缺失(NaN)值的列

这种方法在删除包含空字符串、零或基本上任何给定值的列时特别有用。比如,

df = df.loc[:,(df!='').all(axis=0)]

删除至少有一个空字符串的列。

能否指定'dropna'值?例如,您可以删除所有为零的行吗?您可以使用pandas io解析器定义给定输入选项卡中的NaN值为0,或者,您可以这样准备步骤:
df[df==0]=np.NaN;df=df.dropna(axis=1,how='all')
对于inplace:
df.dropna(axis=1,how='all',inplace=True)
我使用了
df=df.dropna(axis=1,how='all')
但它删除了我所有的df列。其他栏不是完全空的。你能接受这个答案吗?这会将问题标记为已解决,并帮助其他用户。如果您回答了一些问题,请至少使用正确的指南样式,如pep8。。。另外,pandas提供了dropna()函数,所以这不是一个好的答案…这个答案不如实现这个,我们只需要计算正确的值。您不需要创建任何新的数据帧,只需执行
df.dropna(…,inplace=True)
def missing(dff):
    print (round((dff.isnull().sum() * 100/ len(dff)),2).sort_values(ascending=False))

missing(df)

#output
'''
id          83.33
location    83.33
owner        0.00
pets         0.00
dtype: float64
'''
df = df.loc[:,df.notna().any(axis=0)]
df = df.loc[:,df.notna().all(axis=0)]
df = df.loc[:,(df!='').all(axis=0)]