我有一个数据框:
df = pd.DataFrame({"ID": ["ID1", "ID2", "ID3",
"ID4", "ID5"],
"Item": ["Item1", "Item2", "Item3",
"Item4","Item5"],
"Catalog1": ["cat1", "1Cat12", "Cat35",
"1cat3","Cat5"],
"Catalog2": ["Cat11", "Cat12", "Cat35",
"1Cat1","2cat5"],
"Catalog3": ["cat6", "Ccat2", "1Cat9",
"1cat3","Cat7"],
"Price": ["716", "599", "4400",
"150","139"]})
我需要找到所有在名称以 Catalog 开头的列中包含字符串“cat1”或“Cat1”的行(这些列的数量可能有所不同,因此我不能只列出它们)。
我试过:
filter_col = [col for col in df if col.startswith('Catalog')]
df_res = df.loc[(filter_col.str.contains('(?i)cat1'))]
但我犯了错误:
AttributeError:'list' 对象没有属性 'str'
在您的代码中,filter_col 是一个列表。您不能将 str 与它一起使用。您可以使用 pandas 函数来更快地执行操作。
以下是解决该问题的代码:
我不知道你的原始数据有多大,但是对于下面的代码:
您将获得结果:
我发现的问题是您想
.str
直接使用列表的方法,这会导致错误。但是,您可以在pd.Series
我的代码中使用它。也许你可以
pd.Series
在使用之前尝试一下str.contains
,例如,这样你就会得到
搜索每一列的简短一行。
结果: