我的问题是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)
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
答案 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