Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除所有行和标题均为na的dataframe列_Python_Pandas_Dataframe - Fatal编程技术网

Python 删除所有行和标题均为na的dataframe列

Python 删除所有行和标题均为na的dataframe列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个dataframe,它包含许多非类型的值,我想删除所有行值和标题都为None的列。我正在努力找到一种方法来做到这一点。在下面的MWE中,我成功地删除了所有行为无的所有列,或者删除了标题为无的所有列 from __future__ import annotations import pandas as pd d = [[1, 2, None, None, None], [4, 5, None, None, 7]] cols = ['a', 'b', 'c', None, None] d

我有一个dataframe,它包含许多非类型的值,我想删除所有行值和标题都为None的列。我正在努力找到一种方法来做到这一点。在下面的MWE中,我成功地删除了所有行为无的所有列,或者删除了标题为无的所有列

from __future__ import annotations

import pandas as pd

d = [[1, 2, None, None, None], [4, 5, None, None, 7]]
cols = ['a', 'b', 'c', None, None]
df = pd.DataFrame(data=d, columns=cols)

print("Original: \n", df)
#Original: 
#    a  b     c   NaN  NaN
#0  1  2  None  None  NaN
#1  4  5  None  None  7.0

print("\nDropped how = all: \n", df.dropna(axis=1, how="all"))    # Drops column 'c'
#Dropped how = all: 
#    a  b  NaN
#0  1  2  NaN
#1  4  5  7.0

print("\nDropped None columns: \n", df[df.columns.dropna()])
#Dropped None columns: 
#    a  b     c
#0  1  2  None
#1  4  5  None

我怎样才能只删除我想删除的列并得到这个

#Wanted: 
#    a  b     c  NaN
#0  1  2  None   NaN
#1  4  5  None   7.0

您可以将两个条件与
&
一起使用,并反转并使用
.loc[]

df.loc[:,~(df.columns.isna() & df.isna().all())]


下面是一种使用
notna
any
并基于以下条件对数据帧执行布尔索引的方法:

df.loc[:, (df.notna() | df.columns.notna()).any(0)]

   a  b     c  NaN
0  1  2  None  NaN
1  4  5  None  7.0
IIUC


这回答了你的问题吗?DeMorgan的版本
df.loc[:,df.notna().any()| df.columns.notna()]
@piRSquared Nice 1,我相信效率更高。谢谢你,先生:)这正是我想到的第一件事。关井
df.loc[:,[*df.T.reset_index().notna().any(1)]
df.loc[:, (df.notna() | df.columns.notna()).any(0)]

   a  b     c  NaN
0  1  2  None  NaN
1  4  5  None  7.0
df.loc[:,df.T.reset_index().notna().any(1).values]
   a  b     c  NaN
0  1  2  None  NaN
1  4  5  None  7.0