English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Пример операции по потере данных в pandas
В реальной жизни проблема потери данных всегда существует. В областях, таких как машинное обучение и данные挖掘, сталкиваются с серьезными проблемами в точности предсказаний моделей, так как пропущенные значения приводят к снижению качества данных. В этих областях обработка пропущенных значений является основной задачей для повышения точности и эффективности моделей.
Давайте рассмотрим онлайн-опрос продукта. Часто люди не делятся всей информацией, связанной с ними. Некоторым трудно делиться своим опытом, но они не делятся тем, как долго они используют этот продукт; некоторые делятся своим опытом использования продукта, а не своими контактными данными. Таким образом, всегда теряется часть данных, что очень распространено в реальном времени.
Давайте посмотрим, как использовать pandas для обработки пропущенных значений (например, NA или NaN).
# импорт библиотеки pandas import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df)
Результат выполнения приведен ниже:
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN заменено на '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Используя перераспределение индексов, мы создали DataFrame с пропущенными значениями. В выходе NaN означает, что это не число.
Чтобы сделать обнаружение пропущенных значений легче (и для различных dtypes массивов), Pandas предоставляет функции ISNULL() и NOTNULL(), которые также являются методами для объектовseries и dataframe-
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df['one'].isnull())
Результат выполнения приведен ниже:
a False b True c False d True e False f False g True h False Name: one, dtype: bool
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df['one'].notnull())
Результат выполнения приведен ниже:
a True b False c True d False e True f True g False h True Name: one, dtype: bool
При агрегации данных NA будет считаться нулём Если данные везде недоступны, результат будет недоступен
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df['one'].sum())
Результат выполнения приведен ниже:
2.02357685917
import pandas as pd, import numpy as np, df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two']) print(df['one'].sum())
Результат выполнения приведен ниже:
nan
Pandas предоставляет несколько методов для удаления пропущенных значений. Функция fillna может заполнить NA значения данными, не равными нулю, несколькими способами.
Следующий код показывает, как заменить «NaN» на «0».
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one', ']) df = df.reindex(['a', 'b', 'c'])) print(df) print(("NaN заменено на '0':")) print(df.fillna(0))
Результат выполнения приведен ниже:
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN заменено на '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Здесь мы заполняем нулевые значения; вместо этого мы также можем заполнить другие значения.
Используя концепцию заполнения, обсуждаемую в разделе «Перенумерация индексов», мы заполним отсутствующие значения.
Метод | Операция |
pad/fill | Заполнение значений перед |
bfill/backfill | Заполнение значений по умолчанию |
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df.fillna(method='pad'))
Результат выполнения приведен ниже:
one two three a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df.fillna(method='backfill'))
Результат выполнения приведен ниже:
one two three a 0.077988 0.476149 0.965836 b -0.390208 -0.551605 -2.301950 c -0.390208 -0.551605 -2.301950 d -2.000303 -0.788201 1.510072 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g 0.085100 0.532791 0.887415 h 0.085100 0.532791 0.887415
Если нужно исключить пропущенные значения, используйте функцию dropna вместе с параметром axis. По умолчанию, axis = 0, что означает, что если в строке есть любое значение NA, то будет исключена целая строка.
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df.dropna())
Результат выполнения приведен ниже:
one two three a 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd, import numpy as np, df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'], columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']), print(df.dropna(axis=1)),
Результат выполнения приведен ниже:
Пустой DataFrame Столбцы: [] Индекс: [a, b, c, d, e, f, g, h]
Часто нам необходимо заменить общее значение на определенное значение. Это можно сделать с помощью метода replace.
В很多 случаях, нам нужно заменить общее значение на определенное значение. Это можно сделать с помощью метода replace.
import pandas as pd, import numpy as np, df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}), print(df.replace({1000:10,2000:60})),
Результат выполнения приведен ниже:
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60
import pandas as pd, import numpy as np, df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}), print(df.replace({1000:10,2000:60})),
Результат выполнения приведен ниже:
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60