我有多个专栏,如MLB,NBA,NHL,NFL,TESTNBA,我想返回一个列表,其中列中包含字符串MLB或NBA。如下所示:
df_check = ['MLB', 'NBA', 'TESTNBA']
value_cols = [col for col in df.columns if df_check in col]
以上错误导致以下错误:
TypeError:'in'要求字符串作为左操作数,而不是列表
有没有办法按多个值过滤列?
你可以使用pandas.DataFrame.filter
:
建立
df = pd.DataFrame(columns=['MLB', 'NBA', 'NHL', 'NFL', 'TESTNBA'])
df_check = ['MLB', 'NBA']
df.filter(regex='|'.join(df_check)).columns
Index(['MLB', 'NBA', 'TESTNBA'], dtype='object')
in
运算符不能以矢量化方式工作。根据您的逻辑,您将需要使用带有生成器表达式的any
:
value_cols = [col for col in df.columns if any(i in col for i in df_check)]
更好的是,您可以使用str.contains
进行布尔索引。这是一个演示:
df = pd.DataFrame(columns=['MLB1', 'NBA2', 'SOMEOTHERCOL', 'TESTNBA3', 'MLB4'])
df_check = ['MLB', 'NBA', 'TESTNBA']
value_cols = df.columns[df.columns.str.contains('|'.join(df_check))]
Index(['MLB1', 'NBA2', 'TESTNBA3', 'MLB4'], dtype='object')