Python 如何创建列列表,这些列的行中包含指定的字符串?

Python 如何创建列列表,这些列的行中包含指定的字符串?,python,pandas,list,dataframe,subset,Python,Pandas,List,Dataframe,Subset,我有一个dataframe,它有数百列,我想返回一组只包含真/假字符串的列 i、 e 我想返回['a'、'b'、'e'] 我发现的所有堆栈溢出问题似乎都是在列标题中而不是在行值中搜索字符串 一旦发现它包含一个true/false示例,就应该将该列添加到列表中,但我担心我必须搜索整个数据帧,因为它可能包含许多NULL 我的数据非常大,有什么方法可以优化此搜索吗?您可以使用以下字符串: df.columns[df.isin(['true', 'false']).all()] # Index(['a'

我有一个dataframe,它有数百列,我想返回一组只包含真/假字符串的列

i、 e

我想返回['a'、'b'、'e']

我发现的所有堆栈溢出问题似乎都是在列标题中而不是在行值中搜索字符串

一旦发现它包含一个true/false示例,就应该将该列添加到列表中,但我担心我必须搜索整个数据帧,因为它可能包含许多NULL

我的数据非常大,有什么方法可以优化此搜索吗?

您可以使用以下字符串:

df.columns[df.isin(['true', 'false']).all()]
# Index(['a', 'b', 'e'], dtype='object')
如果它们确实是布尔真/假值,则可以使用

或者,对数据类型进行简单筛选:


完成cs95中的答案

另一种解决方案是查看列中所有可能的值,并将这组值与要保持为true或false的值进行比较。如您所见,在额外的f列上,返回值为False

代码如下:

# Import module
import pandas as pd

df = pd.DataFrame(
    [["true",  "false", 34, "cat", "true", "true"],
     ["false", "false", 16, "dog", "true","false"],
     ["true", "true", 16, "cow", "false", "Other"],
     ["false", "false", 16, "dog", "Other","false"]],
    columns=["a", "b", "c", "d", "e", "f"]
)

# return if all values in the column are either "true" or "false"
def get_valid_column(col):
    return set(col.unique()) == set(["true", "false"])

print(df.apply(get_valid_column))
# a     True
# b     True
# c    False
# d    False
# e     True
# f    False
# dtype: bool
df.infer_objects().select_dtypes(bool).columns
# Index(['a', 'b', 'e'], dtype='object')
df.columns[df.dtypes == bool]
# Index(['a', 'b', 'e'], dtype='object')
# Import module
import pandas as pd

df = pd.DataFrame(
    [["true",  "false", 34, "cat", "true", "true"],
     ["false", "false", 16, "dog", "true","false"],
     ["true", "true", 16, "cow", "false", "Other"],
     ["false", "false", 16, "dog", "Other","false"]],
    columns=["a", "b", "c", "d", "e", "f"]
)

# return if all values in the column are either "true" or "false"
def get_valid_column(col):
    return set(col.unique()) == set(["true", "false"])

print(df.apply(get_valid_column))
# a     True
# b     True
# c    False
# d    False
# e     True
# f    False
# dtype: bool