将名称传递到列表,并对每个名称使用“包含”

时间:2018-09-17 08:21:08

标签: python pandas if-statement

我有一个数据帧,其中一个名为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一样进行,但是具有这种想法。我该如何进行呢?

2 个答案:

答案 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)