Значение в кадре данных панд равно 13, но не всегда распознается - PullRequest
0 голосов
/ 03 июля 2018

Я работаю над заданием по курсу «Введение в науку о данных». У меня есть фрейм данных с «Страна» в качестве индекса и «Ранг» в качестве одного из столбцов. Когда я пытаюсь уменьшить фрейм данных только для включения строк со странами в ранге 1-15, следующие работы, но исключает Иран, который занимает 13 место.

df.set_index('Country', inplace=True)
df.loc['Iran', 'Rank'] = 13 #I did this in case there was some sort of 
corruption in the original data
df_top15 = df.where(df.Rank < 16).dropna().copy()   
return df_top15

Когда я пытаюсь

df_top15 = df.where(df.Rank == 12).dropna().copy()

Я получаю скандал за Испанию.

Но когда я пытаюсь

df_top15 = df.where(df.Rank == 13).dropna().copy()

Я просто получаю заголовки столбцов, для Ирана нет строки.

Я тоже пытался

df.Rank == 13

и получил серию с False для всех стран, кроме Ирана, что было правдой.

Есть идеи, что может быть причиной этого?

1 Ответ

0 голосов
/ 03 июля 2018

Ваш код работает нормально:

df = pd.DataFrame([['Italy', 5],
                   ['Iran', 13],
                   ['Tinbuktu', 20]],
                  columns=['Country', 'Rank'])

res = df.where(df.Rank < 16).dropna()

print(res)

  Country  Rank
0   Italy   5.0
1    Iran  13.0

Однако мне не нравится этот метод, потому что через mask dtype вашей серии Rank становится float из-за первоначального преобразования некоторых значений в NaN.

Лучшей идеей, на мой взгляд, является использование query или loc. Использование любого метода устраняет необходимость в dropna:

res = df.query('Rank < 16')
res = df.loc[df['Rank'] < 16]

print(res)

  Country  Rank
0   Italy     5
1    Iran    13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...