И так вы создаете фрейм из csv файла, затем присваиваете имена колонкам. Это первое место распечатайте фрейм и посмотрите что выглядит так как вы ожидаете.
Затем исходя из вашего кода вы хотите ВЫБРАТЬ подсет данных по критерию наличия в поле колонки name подстроки 'i3' или 'oem'. То есть если любая из этих подстрок находится в поле колонки name вы выбираете весь этот ряд.
И так код ваш в принципе
верный, если задача это та которую я указал. Вы конечно можете импортировать re, и добавить параметр, flags=re.IGNORECASE. Но в целом на сколько я помню нюансы разницы между case=False нет работать должно и так и так.
https://pandas.pydata.org/docs/reference/api/panda... вот ссылка на документацию (возможно вы ее открывали), там есть пример на поиск одной или более подстрок, и он естественно работает (но вы все так и сделали).
Подумайте эту ли задачу вы решаете, может другую, и приходит ли фрейм в том виде в котором вы ожидаете.
df[df.name.str.contains('i3|oem', regex=True, case=False)])
Вот это ваш код выберет все строки у которых в колонке name поле содержит подстроку 'i3' ИЛИ 'oem' и не важно в каком регистре (нижнем или верхнем).
вот слепил игрушечный маленький фрейм
df = pd.DataFrame({
'name':['23i3f','dOemf','25','s2f5','df5'],
'amount':[1,2,3,4,5]
})
print(df[df.name.str.contains('i3|oem',regex=True,flags=re.IGNORECASE)])
И он работат, как и ожидается.