删除列中所有项目相同(不包括标题)的列,并匹配指定的字符串

时间:2016-09-01 22:47:26

标签: python pandas

我的问题是Delete Column in Pandas based on Condition的扩展,但我有标题,而且信息不是二进制的。我希望能够传递一个变量“search_var”(包含一个字符串)来过滤掉只包含该字符串的列,而不是删除包含全零的列。

我最初认为我应该读取df并遍历每一列,以列表形式读取每一列,并打印列len(col_list)> 2,search_var不在col_list中。提供给上一篇涉及布尔数据帧(df!= search_var)的帖子的解决方案引起了我的兴趣,可能有一种更简单的方法,但我怎么能解决标题不匹配的问题,因此不能纯粹过滤True / False?

我拥有的(非工作):

import pandas as pd
df = pd.read_table('input.tsv', dtype=str)
with open('output.tsv', 'aw') as ofh:
    df['col_list'] = list(df.values)
    if len(col_list) < 3 and search_var not in col_list:
        df.to_csv(ofh, sep='\t', encoding='utf-8', header=False)

示例输入,search_var ='red'

Name  Header1 Header2 Header3
name1 red     red     red
name2 red     orange  red
name3 red     yellow  red
name4 red     green   red
name5 red     blue    blue

预期输出

Name  Header2 Header3
name1 red     red
name2 orange  red
name3 yellow  red
name4 green   red
name5 blue    blue

1 个答案:

答案 0 :(得分:1)

您可以检查列中non-red项的数量,如果它不为零,则使用loc选择它:

df.loc[:, (df != 'red').sum() != 0]

#    Name   Header2   Header3
# 0 name1       red       red
# 1 name2    orange       red
# 2 name3    yellow       red
# 3 name4     green       red
# 4 name5      blue      blue
相关问题