FutureWarning: поэлементное сравнение не удалось;вместо этого возвращаем скаляр, но в будущем будем выполнять поэлементное сравнение - PullRequest
0 голосов
/ 24 октября 2019

Я работал с набором данных Football Transfers и пытаюсь напечатать строки с конкретными значениями столбцов. Как видно из строки 11 и строки 12 кода, я успешно напечатал строки, в которых плата за перевод составляет 222000000, и другие значения. Но я не могу напечатать строки, рыночная стоимость которых не равна «NaN»

import pandas as pd
import numpy as np

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

data0 = 'C:/Users/Siddhardh/Desktop/OiDS Project/Code/Transfers.csv'
data = pd.read_csv(data0)
#print(data.head())

#data1 = data.loc[data['Transfer_fee'] == 222000000]
#print(data1.head())

if(data['Market_value'] != 'NaN'):
    print(data.head())

Это ошибка, которую я получаю;

C:\Users\Siddhardh\Desktop\OiDS Project\Code\lib\site-packages\pandas\core\ops\__init__.py:1115: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  result = method(y)
Traceback (most recent call last):
  File "C:/Users/Siddhardh/Desktop/Python/Projects/OiDS_Transfers/Central_Code.py", line 14, in <module>
    if(data['Market_value'] != 'NaN'):
  File "C:\Users\Siddhardh\Desktop\OiDS Project\Code\lib\site-packages\pandas\core\generic.py", line 1555, in __nonzero__
    self.__class__.__name__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

1 Ответ

0 голосов
/ 24 октября 2019

Проблема в вашем коде заключается в том, что:

  • результат вычисляется для каждой строки отдельно (так что результатом является логическое значение Series ),
  • но вам действительно нужен логический скаляр (либо одиночный True или одиночный False).

Чтобы преобразовать такой логический Series в одно значение, используйте any () или all () , в зависимости от того, что нужно.

Еще одна деталь: Market_value , как я полагаю, представляет собой float столбец и NaN толькоспособ печати значения not-a-number . На самом деле, это специальное значение типа float . Поэтому сравнение с 'NaN' как строкой неверно.

Обратите также внимание, что NaN не равно никакому другому значению, включая другие NaN . Чтобы проверить, является или нет какое-либо значение NaN , используйте функции isna () или notna () .

Итак, чтобы подвести итог, запустите вместо:

if(data['Market_value'].notna().all()):
    print(data.head())
...