Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Удалить список, если nan находится в списках списков

Автор вопроса: Panic_PicnicОтветов: 2

У меня есть список списков из фрейма данных Pandas, который содержит значения nan. Я хотел бы удалить все списки, содержащие какие-либо значения nan. Затем постройте оставшиеся значения.

Пример

test = [[1,2],[1,nan],[3,4]]

Конечные результаты

test = [[1,2],[3,4]]

Если возможно, я также хотел бы сделать график из конечных результатов, используя любой метод построения графика. Мы будем очень признательны за любую помощь, которую вы можете оказать на этом пути.

Я прошу прощения за путаницу, которую вызвал этот вопрос, список списков был взят из фрейма данных pandas, поэтому в примере присутствует nan. Я хотел бы сохранить фрейм данных как есть и хотел бы работать со списком списков

  • Это недопустимый синтаксис Python. baduker 06.11.2020
  • Вы используете панды? Anthony Inthavong 06.11.2020
  • Предоставьте минимальный воспроизводимый пример, включая воспроизводимые образцы ваших входных и выходных данных и код за то, что вы уже пробовали на основе ваших собственных исследований G. Anderson 06.11.2020
  • Я прошу прощения за путаницу, которую вызвал этот вопрос, список списков был взят из фрейма данных pandas, поэтому в примере присутствует nan. Я хотел бы сохранить фрейм данных как есть и хотел бы работать со списком списков. Panic_Picnic 06.11.2020

pythonnannested-lists

Ответы

Ответ 1 · Anthony Inthavong

Удаление значений из списка

Использование filter

nan не является правильным синтаксисом Python и используется только в библиотеке Pandas. Поэтому я собираюсь заменить это значение на None.

мы можем использовать функцию filter для удаления любых значений в списке, который содержит значение nan.

test = list(filter(lambda x: None not in x, test))

Использование понимания списка

Изменить: должно быть x вместо test. Спасибо @fountainhead

test = [x вместо x в тесте, если None не в тесте]

test = [x for x in test if None not in x]

Оба вернут список со значениями, не содержащими None в них.

Заговор

Мы можем использовать библиотеку под названием matplotlib для построения графика. Например, чтобы создать точечную диаграмму:

import matplotlib.pyplot as plt
plt.scatter(x, y)

где plt.scatter принимает значения x и значения y для строки и столбца соответственно. Полный код выглядит следующим образом:

import matplotlib.pyplot as plt

test = [[1,2],[1,None],[3,4]]
test = list(filter(lambda x: None not in x, test))

x = [x for x,y in test]
y = [y for x,y in test]

# Assume all first elements are x values second elements are y values
plt.scatter(x, y)
plt.show()

Примеры изображений следующие

Ответ 2 · fountainhead

Вы можете перестроить свой список, используя понимание списка, без подсписков, имеющих nans:

import math

test = [sub_list for sub_list in test if not any(math.isnan(x) for x in sub_list)]

Если вы хотите удалить из списка test "на месте", вы можете сделать это:

import math

for (which, sub_list) in enumerate(test[::-1]):
    if any(math.isnan(x) for x in sub_list):
        del test[len(test)-1-which]

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы