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