保留列列表中包含数据的行python

时间:2016-11-15 16:40:37

标签: python pandas

如何选择包含特定列列表中数据的行,并删除那些特定列中根本没有数据的行?

这是我到目前为止的代码:

VC_sub_selection = final[final['VC'].isin(['ACTIVE', 'SILENT']) & final['Status'].isin(['Test'])]

data_usage_months = list(data_usage_res.columns)

这是数据集的一个例子

item    VC     Status     Jun 2016   Jul 2016
1       Active Test       Nan        1.0
2       Silent Test       Nan        Nan
3       Active Test       2.0        3.0
4       Silent Test       5.0        Nan

我希望实现的是项目1,3,4将保留在数据集中,项目2将被删除。所以适用的条件是:如果所有月份都是Nan而不是下降行。

谢谢,

的Jeroen

1 个答案:

答案 0 :(得分:1)

尽管Nickil的解决方案回答了这个问题,但它没有考虑到以后可能会添加更多日期列。因此,在将来的情况下使用列的索引位置可能不够。

下面介绍的解决方案不使用索引,而是使用正则表达式查找日期列:

import pandas as pd
import re

# item    VC     Status     Jun 2016   Jul 2016
# 1       Active Test       Nan        1.0
# 2       Silent Test       Nan        Nan
# 3       Active Test       2.0        3.0
# 4       Silent Test       5.0        Nan

df = pd.DataFrame({'item': [1,2,3,4],
                   'VC': ['Active', 'Silent', 'Active', 'Silent'],
                   'Status': ['Test'] * 4,
                   'Jun 2016': [None, None, 2.0, 5.0],
                   'Jul 2016': [1.0, None, 3.0, None]})

regex_pattern = r'[a-zA-Z]{3}\s\d{4}'

date_cols = list(filter(lambda x: re.search(regex_pattern, x), df.columns.tolist()))

df_res = df.dropna(subset=date_cols, how='all')

#     Jul 2016  Jun 2016 Status      VC  item
# 0       1.0       NaN   Test  Active     1
# 2       3.0       2.0   Test  Active     3
# 3       NaN       5.0   Test  Silent     4