熊猫根据列名和内容删除列

时间:2018-11-14 23:09:20

标签: 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

我想删除全部为nan并且名称中带有“未命名:”的列(从文件中导入数据框时,标题中没有名称的列经常会发生这种情况)。所需的输出:

   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

或:

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

Out[19]: 
   a  b  Unnamed: 5
0  1  2           5
1  3  4           6

是否存在同时执行这两项操作(通过AND而非OR连接)的pythonic方法?

1 个答案:

答案 0 :(得分:2)

filter + isnull + drop

首先过滤数据框中的列标签,然后计算均为空:

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