У меня есть список списков из фрейма данных Pandas, который содержит значения nan. Я хотел бы удалить все списки, содержащие какие-либо значения nan. Затем постройте оставшиеся значения.
Пример
test = [[1,2],[1,nan],[3,4]]
Конечные результаты
test = [[1,2],[3,4]]
Если возможно, я также хотел бы сделать график из конечных результатов, используя любой метод построения графика. Мы будем очень признательны за любую помощь, которую вы можете оказать на этом пути.
Я прошу прощения за путаницу, которую вызвал этот вопрос, список списков был взят из фрейма данных pandas, поэтому в примере присутствует nan. Я хотел бы сохранить фрейм данных как есть и хотел бы работать со списком списков
Ответ 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]