Python 根据列名和内容删除列

Python 根据列名和内容删除列,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据帧: df = pd.DataFrame([[1,2,np.nan,np.nan,5],[3,4,np.nan,np.nan,6]],columns=['a','b','c','Unnamed: 4','Unnamed: 5']) df Out[16]: a b c Unnamed: 4 Unnamed: 5 0 1 2 NaN NaN 5 1 3 4 NaN NaN 6 我想删

我有这样一个数据帧:

df = pd.DataFrame([[1,2,np.nan,np.nan,5],[3,4,np.nan,np.nan,6]],columns=['a','b','c','Unnamed: 4','Unnamed: 5'])

df
Out[16]: 
   a  b   c  Unnamed: 4  Unnamed: 5
0  1  2 NaN         NaN           5
1  3  4 NaN         NaN           6
我想删除名称中既为nan又为“Unnamed:”的列(从文件导入数据帧时,头中没有名称的列时经常发生这种情况)。期望输出:

   a  b   c  Unnamed: 5
0  1  2 NaN           5
1  3  4 NaN           6
我可以做到:

df[[col for col in df.columns if 'Unnamed: ' not in col]]
Out[18]: 
   a  b   c
0  1  2 NaN
1  3  4 NaN
或:

是否有一种pythonic方法可以同时完成这两件事(通过和非或连接)?

++ 首先筛选数据框中的列标签,然后计算所有为空的列标签:

nulls = df.filter(like='Unnamed').isnull().all()

df = df.drop(nulls[nulls].index, axis='columns')

print(df)

   a  b   c  Unnamed: 5
0  1  2 NaN           5
1  3  4 NaN           6
nulls = df.filter(like='Unnamed').isnull().all()

df = df.drop(nulls[nulls].index, axis='columns')

print(df)

   a  b   c  Unnamed: 5
0  1  2 NaN           5
1  3  4 NaN           6