2

My dataframe has columns like ticket, host, drive model, Chassis, Rack, etc.

I want all the rows with value in the Chassis column equal to '1025C-M3B', '1026T-M3FB', '2026TT-DLRF' or 'SYS-2027TR-D70RF+'. I want to delete the rest.

I tried

data2 = data1[data1.Chassis == '1025C-M3B' 
              or data1.Chassis == '1026T-M3FB' 
              or data1.Chassis == '2026TT-DLRF' 
              or data1.Chassis == 'SYS-2027TR-D70RF+']

Got

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Then tried

data2 = data1[data1.Chassis.all() == '1025C-M3B' 
              or data1.Chassis.all() == '1026T-M3FB' 
              or data1.Chassis.all() == '2026TT-DLRF' 
              or data1.Chassis.all() == 'SYS-2027TR-D70RF+']

Got

KeyError: u'no item named False'

Can anyone please tell me how to do this?

unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677
Akshay Kalghatgi
  • 423
  • 1
  • 4
  • 11

2 Answers2

2

Use bitwise or (|) instead of logical or.

data2 = data1[(data1.Chassis == '1025C-M3B') | (data1.Chassis == '1026T-M3FB') | (data1.Chassis == '2026TT-DLRF') | (data1.Chassis == 'SYS-2027TR-D70RF+')]

You can find plenty of reading material about the use of bitwise vs logical operations in numpy/pandas. Here is one.

Community
  • 1
  • 1
shx2
  • 61,779
  • 13
  • 130
  • 153
1

You could use isin:

data1[data1['Chassis'].isin(['1025C-M3B', '1026T-M3FB', '2026TT-DLRF','SYS-2027TR-D70RF+'])]
unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677