Измените
if tic in df2:
на
if any(tic in s for s in df2):
У вас есть список, но вы пытаетесь получить к нему доступ как к Panda Dataframe.
booking.csv
snum booked name
a1 no
a2 no
a3 no
a4 no
a5 no
a6 no
a7 no
a8 no
a9 no
a10 no
a11 no
a12 no
a13 no
b1 no
b2 no
b3 no
b4 no
b5 no
b6 no
b7 no
b8 no
b9 no
b10 no
b11 no
b12 no
b13 no
Ваш пример с модификацией
import pandas as pd
df1 = pd.read_csv('booking.csv', names=['snum','booked','name'])
df1.drop(['booked', 'name'], axis=1, inplace=True)
df2 = df1.values.tolist()
print('The following tickets are available; %s' % df2)
tic = input('Which ticket would you like to buy? ')
if any(tic in s for s in df2):#df2.str.contains(tic):
print('Ok')
else:
print('Ticket Unavilable')
Дает следующий вывод
The following tickets are available; [['snum'], ['a1'], ['a2'], ['a3'], ['a4'], ['a5'], ['a6'], ['a7'], ['a8'], ['a9'], ['a10'], ['a11'], ['a12'], ['a13'], ['b1'], ['b2'], ['b3'], ['b4'], ['b5'], ['b6'], ['b7'], ['b8'], ['b9'], ['b10'], ['b11'], ['b12'], ['b13']]
Which ticket would you like to buy? a1
Ok
или
The following tickets are available; [['snum'], ['a1'], ['a2'], ['a3'], ['a4'], ['a5'], ['a6'], ['a7'], ['a8'], ['a9'], ['a10'], ['a11'], ['a12'], ['a13'], ['b1'], ['b2'], ['b3'], ['b4'], ['b5'], ['b6'], ['b7'], ['b8'], ['b9'], ['b10'], ['b11'], ['b12'], ['b13']]
Which ticket would you like to buy? c2
Ticket Unavilable