我有一个数据帧,其中一个名为proj
的列中的每一行都有一个句子,在该句子中提到了城市的名称。我想做一个if
条件,当密码通过时,可以使用其他城市的数据。
proj
sd_32 New York
eo_31 Lisbon
..
例如。
x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
while True:
passw = input('Password').upper()
if not passw in ('A','B'):
print('Try again')
continue
else:
break
if passw == 'A':
df = x[x['proj'].str.contains('New York')]
print(df)
elif passw == 'B':
df = x[x['proj'].str.contains('Lisbon')]
print(df)
如何以更Python化的方式做到这一点?
我考虑过要列出一个列表:
city = ['New York','Lisbon','Berlin',..] #unique names of cities
,然后以针对每个城市的代码进行传递,这取决于密码是否像我所做的if
一样进行,但是具有这种想法。我该如何进行呢?
答案 0 :(得分:1)
在您的情况下,您可以使用dict
例如:
d = {"A": 'New York', "B": 'Lisbon'}
if passw in d:
df = x[x['proj'].str.contains(d[passw])]
答案 1 :(得分:1)
也许使用字典,密码为密钥,城市名称为值:cities = {'A': 'New York', 'B': 'Lisbon', ...}
。诚然,您仍然必须检查有效的密钥,但是在上面的循环中,当要求输入密码(使用dict密钥)时会发生这种情况:
cities = {'A': 'New York', 'B': 'Lisbon'}
x = pd.read_csv(r'C:\Users\user\Desktop\Dataset.csv', sep = ',')
while True:
passw = input('Password').upper()
if passw not in cities: # `in cities` same as `in cities.keys()`
print('Try again')
continue
else:
break
df = x[x['proj'].str.contains(cities[passw])]
print(df)