Nano Hash - криптовалюты, майнинг, программирование

доступ к столбцам pandas с помощью сравнения loc и квадратных скобок по элементам

В конкретном фрейме данных у меня есть столбец под названием «Ветер», в котором указано годовое производство энергии ветра в Германии. В начале последовательности продукция настолько мала, что в DF пишется NaN, данных нет. Только с 2010 года у меня есть данные по ветру.

Ссылка DATA для копирования и вставки: API_link_to_data='https://raw.githubusercontent.com/jenfly/opsd/master/opsd_germany_daily.csv'

energyDF = pd.read_csv(API_link_to_data)

теперь следующий код сравнивает два столбца по элементам:

energyDF.loc[:,'Wind'] == energyDF['Wind']

Я ожидал, что результат будет [True, True, True,....,True]

Но это не так. Для значений NaN результат False.

Что ж, результат будет ложным для всех значений NaN, даже если по элементам они одинаковы:

print(wind_col1[0])
print(wind_col2[0])
print(wind_col1[0] == wind_col2[0])
print(wind_col1[0] == np.nan)
print(wind_col2[0] == np.nan)

Результат: нан нан False False False

Ожидается: nan nan True True True

и после выполнения для всего кадра:

energyDF=energyDF.fillna(0)

тогда

energyDF.loc[:,'Wind'] == energyDF['Wind']

список, полный Истин.

Может ли кто-нибудь объяснить это?

Спасибо


  • Это ожидаемо. NaNs ничему не равны. Imo лучшим способом было бы заполнить значение, отсутствующее в кадре данных, а затем проверить равенство 22.12.2019
  • woooooohhh Не знал, что нан ничему не равен. 22.12.2019
  • @AsishM. предложите решение, и я буду голосовать за него как таковое. 22.12.2019

Ответы:


1

NaN не равны сами себе. См.: Почему NaN не равен NaN?

Что касается проверки равенства energyDF.loc[:,'Wind'] == energyDF['Wind']

вы можете fillna обе стороны со значением (желательно тем, которое не встречается в серии), а затем проверить, что обе стороны действительно идентичны

В качестве примера:

>>> df
    ID Col1
0  1.0   AD
1  NaN   BC
2  3.0   CE
>>> (df.loc[:, 'ID'] == df['ID']).all()
False
>>> (df.loc[:, 'ID'].fillna("Non-existent") == df['ID'].fillna("Non-existent")).all()
True
22.12.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..