Home > database >  `df[df['name']=='Penny']` works well while `df[df['sn']=='016
`df[df['name']=='Penny']` works well while `df[df['sn']=='016

Time:07-06

I'm trying to select exact one row from a DataFrame with pandas.

Here is the DataFrame.

df = pd.DataFrame.from_dict({'final': {0: 100, 1: 100, 2: 100, 3: 95, 4: 95},
 'name': {0: 'Penny', 1: 'Sheldon', 2: 'Leonard', 3: 'Rajesh', 4: 'Howard'},
 'sn': {0: '016',
  1: '031',
  2: '016',
  3: '001',
  4: '007'}})
df.set_index('sn', inplace=True)

When I select the row with name, it works well

df[df['name']=='Penny']

However, sn

df[df['sn']=='016']

throws

KeyError: 'sn'

Why is that, how do I fix it?

CodePudding user response:

the reason is that sn represents the index of the Pandas Dataframe rather than a mere column, i.e.

df.index.name
> 'sn'

which leaves df.sn (or, equivalently, df['sn']) undefined throwing a KeyError: 'sn' when you attempt to access/set it.

Using df.index in general and df[df.index=='016'] in your particular example fixes the issue.

Note, however, that the index value 016 is assigned twice while Penny is only used once which leads to different subframes.

  • Related