简体   繁体   中英

Selecting rows based on multiple conditions using Python pandas

Hi I am trying to find a row that satisfies multiple user inputs, I want the result to return a single line that matches the flight date and destination, with origin airport being Atlanta. If they input anything else, it gives back an error and quits.

The input data is a CSV that looks like this:

    FL_DATE ORIGIN  DEST    DEP_TIME
5/1/2017    ATL IAD 1442
5/1/2017    MCO EWR 932
5/1/2017    IAH MIA 1011
5/1/2017    EWR TPA 1646
5/1/2017    RSW EWR 1054
5/1/2017    IAD RDU 2216
5/1/2017    IAD BDL 1755
5/1/2017    EWR RSW 1055
5/1/2017    MCO EWR 744

My current code:

import pandas as pd

df=pd.read_csv("flights.data.csv") #import data frame

input1 = input ('Enter your flight date in MM/DD/YYYY: ') #input flight date
try:
    date = str(input1) #flight date is a string
except:
    print('Invalid date') #error message if it isn't a string
    quit()

input2 = input('Enter your destination airport code: ') #input airport code
try:
    destination = str(input2) #destination is a string
except:
    print('Invalid destination airport code') #error message if it isn't a string
    quit()

df.loc[df['FL_DATE'] == date] & df[df['ORIGIN'] == 'ATL'] & df[df['DEST'] == destination]
#matches flight date, destination, and origin has to equal to GNV

Ideal output is just returning the first row, if I input 5/1/2017 as 'date' and 'IAD' as destination.

In your loc statement, you need to fix your brackets and add parentheses between conditions:

df.loc[(df['FL_DATE'] == input1) & (df['ORIGIN'] == 'ATL') & (df['DEST'] == input2)]

Then it works:

>>> df.loc[(df['FL_DATE'] == date) & (df['ORIGIN'] == 'ATL') & (df['DEST'] == destination)]

    FL_DATE ORIGIN DEST  DEP_TIME
0  5/1/2017    ATL  IAD      1442

You should be able to resolve your issue with below example. The syntax of yours was wrong for multiple conditions

import pandas as pd    
df=pd.DataFrame({'FL_DATE':['5/1/2017'],'ORIGIN':['ATL'],'DEST':['IAD'],'DEP_TIME':[1442]})
df.loc[(df['FL_DATE'] == '5/1/2017') & (df['ORIGIN'] == 'ATL') & (df['DEST'] == 'IAD')]

Gives

DEP_TIME    DEST    FL_DATE     ORIGIN
1442        IAD     5/1/2017    ATL

You should change your code to something like this

df.loc[(df['FL_DATE'] == date) & (df['ORIGIN'] == 'ATL') & (df['DEST'] == destination)]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM