Pandas - один из инструментов машинного обучения, который используется для очистки и анализа данных. Он имеет функции, которые используются для изучения, очистки, преобразования и визуализации данных.

Теперь давайте разберемся и узнаем больше о пандах-

1. Введение в Pandas

Pandas - это пакет Python с открытым исходным кодом, созданный на основе Numpy, разработанный Уэсом МакКинни . Он используется как один из важнейших инструментов очистки и анализа данных. Он обеспечивает быстрые, гибкие и выразительные структуры данных.

Pandas происходит от термина «Pan el- ta- s», эконометрического термина для наборов данных, включающих наблюдения за несколько периодов времени для те же лица. -источник Википедия

2. Как установить Pandas?

Вы можете установить Pandas с помощью следующих команд:

# To install pandas in terminal or command line use one of the commands
pip install pandas  
# or
conda install pandas  
# To install pandas in jupyter notebook use this command
!pip install pandas

3. Как импортировать панд?

import pandas as pd

Используя указанную выше команду, вы можете легко импортировать библиотеку pandas.

4. Структуры данных Pandas

Pandas имеет дело с тремя типами структур данных:

  • Серии
  • DataFrame
  • Панель

а) Серия - это одномерная структура, подобная массиву, с однородными данными. Размер серии неизменен (не может быть изменен), но его значения изменчивы.

б) DataFrame - это двумерная структура, подобная массиву, с разнородными данными. Данные выровнены в табличной форме (форма «Строки и столбцы»). Размер и значения DataFrame изменяемы.

c) Панель представляет собой трехмерную структуру данных с разнородными данными. Панель сложно представить в графическом виде. Но его можно проиллюстрировать как контейнер DataFrame. Размер и значения Panel изменяемы.

Примечание. Series и DataFrame - наиболее широко используемые структуры данных в пандах. Поэтому я буду обсуждать только эти две структуры данных позже.

5. Создание рядов и фреймов данных

Серии :

pandas.Series (data = None, index = None, dtype = None, copy = false)

параметры:

данные: данные принимают различные формы, такие как ndarray, список, константы

index: значения индекса должны быть уникальными и хешируемыми, той же длины, что и данные. По умолчанию np.arrange (n), если индекс не передан.

dtype: dtype предназначен для типа данных. Если None, тип данных будет выведен

copy: копировать входные данные. по умолчанию false

а) Создание серии из ndarray

#import the pandas library and aliasing as pdimport pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
example_1 = pd.Series(data,index=[0,1,2,3)
print example_1
out[1]: 0  a
        1  b
        2  c
        3  d

б) Создание серии из словаря

import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print s
out:
a 0.0
b 1.0
c 2.0
dtype: float64
Note:Dictionary keys are used to construct index here.

в) Создание серии из скаляра

import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print s
out:
0  5
1  5
2  5
3  5
dtype: int64

Фрейм данных:

pandas.DataFrame (data = None, index = None, dtype = None, copy = false)

параметры:

данные: данные принимают различные формы, такие как ndarray, список, константы

index-: значения индекса должны быть уникальными и хешируемыми, той же длины, что и данные. По умолчанию np.arrange (n), если индекс не передан.

dtype: dtype предназначен для типа данных. Если нет, будет выведен тип данных.

copy: копировать входные данные. по умолчанию false

а) Создание DataFrame из списка

Example-1:
import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df
out:
     0
0    1
1    2
2    3
3    4
4    5
Example-2-
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print df
out:
      Name     Age
0     Alex     10.0
1     Bob      12.0
2     Clarke   13.0
Note: the dtype parameter changes the type of Age column to floating point.

б) Создайте DataFrame из Dict из ndarrays / Lists

Все ndarrays должны быть одинаковой длины. Если индекс передан, то длина индекса должна быть равна длине массивов.

Если индекс не передается, то по умолчанию индексом будет диапазон (n), где n - длина массива.

Example-1
import pandas as pd
data ={'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print df
out:
      Age      Name
0     28        Tom
1     34       Jack
2     29      Steve
3     42      Ricky
Note: Here,0,1,2,3 are the default index assinged each using the function range(n).
Example-2
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print df
out:
         Age    Name
rank1    28      Tom
rank2    34     Jack
rank3    29    Steve
rank4    42    Ricky

6. Панды: Как читать и писать файлы?

Pandas может читать и записывать любые типы файлов, такие как Excel, CSV и многие другие файлы, это одна из его важнейших функций. Такие методы, как df.read _ * () и df.to _ * (), помогают эффективно работать со всеми типами файлов.

Я буду использовать Iris-dataset для объяснения.

источник: https://www.kaggle.com/uciml/iris

а) Чтение файла .csv

In [1]:import pandas as pd
In [2]:data = pd.read_csv("Iris_dataset.csv")
In [3]:data.head()
out[3]:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species 
1    5.1           3.5          1.4           0.2       Iris-setosa
2    4.9           3.0          1.4           0.2       Iris-setosa
3    4.7           3.2          1.3           0.2       Iris-setosa
4    4.6           3.1          1.5           0.2       Iris-setosa
5    5.0           3.6          1.4           0.2       Iris-setosa

б) Запись файла в формате .xlsx

In [4]:import pandas as pd
In [5]:data= pd.read_csv("Iris_dataset.csv")
In [6]:type(data)
out[6]:pandas.core.frame.DataFrame
In [7]:data_csv = data.to_excel('iris_data.xlsx')

Точно так же вы можете читать и записывать и другие файлы.

7. Столбцы и строки DataFrame (.shape) и количество измерений.

a) Функция df.shape в pandas возвращает результат в виде (m, n), где m - количество строк, а n - количество столбцов во фрейме данных.

б) df.ndim возвращает int, представляющий количество осей / измерений массива. Он вернет 1 для серии и 2 для DataFrame.

In [8]:data.shape
out[8]:(150,6)
In [9]:data.ndim
out[9]: 2

8. Предварительный просмотр DataFrame с помощью .head () и .tail ()

a) df.head (n = количество возвращаемых строк) возвращает первые n строк из DataFrame.

б) df.tail (n = количество возвращаемых строк) возвращает последние n строк из DataFrame.

#df.head()
In [3]:data.head(4)
out[3]:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species 
1    5.1           3.5          1.4           0.2       Iris-setosa
2    4.9           3.0          1.4           0.2       Iris-setosa
3    4.7           3.2          1.3           0.2       Iris-setosa
4    4.6           3.1          1.5           0.2       Iris-setosa
Note:in head(n) you can cange value of n which shows n no. of rows in output
#df.tail()
In [4]:data.tail()
out[4]:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species 
146  6.7          3.0            5.2          2.3     Iris_virginica
147  6.3          2.5            5.0          1.9     Iris-virginica
148  6.5          3.0            5.2          2.0     Iris-virginica
149  6.2          3.4            5.4          2.3     Iris-virginica
150  5.9          3.0            5.1          1.8     Iris-virginica

9. высокоуровневая статистика с пандами

а) Pandas DataFrame.describe ()

Метод description () используется для вычисления некоторых статистических данных, таких как процентиль, среднее и стандартное числовые значения Series или DataFrame. Он анализирует как числовые, так и объектные серии, а также наборы столбцов DataFrame смешанных типов данных.

In [5]data.describe()
out[5]:
         Id  SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm count 150.000000 150.000000 150.000000  150.000000    150.000000
mean   75.500000   5.843333   3.054000    3.758667      1.198667
std    43.445368   0.828066   0.433594    1.764420      0.763161
min     1.000000   4.300000   2.000000    1.000000      0.100000
25%    38.250000   5.100000   2.800000    1.600000      0.300000
50%    75.500000   5.800000   3.000000    4.350000      1.300000
75%   112.750000   6.400000   3.300000    5.100000      1.800000
max   150.000000   7.900000   4.400000    6.900000      2.500000
#for one column
In [8]:data['SepalLengthCm'].describe()
out[8]:
count    150.000000
mean       5.843333
std        0.828066
min        4.300000
25%        5.100000
50%        5.800000
75%        6.400000
max        7.900000
Name: SepalLengthCm, dtype: float64

10. Функции .dtypes и .astype () в Pandas

Для проверки типов данных столбцов фрейма данных используется функция .dtypes . Серии имеют только один тип данных, но во фрейме данных могут быть смешанные типы данных.

#for iris_dataset
In [1]:data.dtypes
out[1]:Id                 int64
       SepalLengthCm    float64
       SepalWidthCm     float64
       PetalLengthCm    float64
       PetalWidthCm     float64
       Species           object
       dtype: object

Примечание. Любой столбец во фрейме данных, содержащий символ / строку, отображается как тип данных «объект».

Если вы хотите изменить тип данных определенного столбца во фрейме данных, используйте функцию .astype ().

Например, чтобы увидеть столбец «SepalLengthCm» в виде строки

In [2]: data['SepalLengthCm'].astype(str)
out[2]: 0      5.1
        1      4.9
        2      4.7
        3      4.6
        4      5.0
           ... 
        145    6.7
        146    6.3
        147    6.5
        148    6.2
        149    5.9
  Name: SepalLengthCm, Length: 150, dtype: object

11. Выбор столбцов и строк в Pandas DataFrame

i) Три основных метода выбора столбцов из фреймов данных в пандах.

a) df.column_name (точечная запись)

In [3]:data.Species.head()
out[3]:0    Iris-setosa
       1    Iris-setosa
       2    Iris-setosa
       3    Iris-setosa
       4    Iris-setosa
       Name: Species, dtype: object

б) df [‘column_name’] (с использованием квадратных скобок и имени столбца в виде строки)

In [3]:data['Species'].head()
out[3]:0    Iris-setosa
       1    Iris-setosa
       2    Iris-setosa
       3    Iris-setosa
       4    Iris-setosa
       Name: Species, dtype: object

c) data.iloc [0: 0, ‹column_number›] (с использованием числовой индексации и селектора iloc)

In [3]:data.iloc[0:,5].head()
out[3]:0    Iris-setosa
       1    Iris-setosa
       2    Iris-setosa
       3    Iris-setosa
       4    Iris-setosa
       Name: Species, dtype: object

ii) Выбор строк

Строки в DataFrame выбираются, как правило, с использованием методов выбора iloc / loc или с использованием логических селекторов (выбор на основе значения другого столбца или переменной).

#selecting rows using iloc/loc
Example-1
In [7]:data.iloc[0:5,].head()
out[7]:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species 
1    5.1           3.5          1.4           0.2       Iris-setosa
2    4.9           3.0          1.4           0.2       Iris-setosa
3    4.7           3.2          1.3           0.2       Iris-setosa
4    4.6           3.1          1.5           0.2       Iris-setosa
5    5.0           3.6          1.4           0.2       Iris-setosa
Example-2
In [8]:data.iloc[4, : ]
out[8]:Id                  5
SepalLengthCm              5
SepalWidthCm             3.6
PetalLengthCm            1.4
PetalWidthCm             0.2
Species          Iris-setosa
Name: 4, dtype: object

iii) Выбор одновременно строк и столбцов

#selecting column number 1 and five number of row's values of that column
Method-1
In [9]:data.iloc[0:5,1].head()
out[9]:0    5.1
       1    4.9
       2    4.7
       3    4.6
       4    5.0
       Name: SepalLengthCm, dtype: float64
Method-2
In [10]:data.loc[0:5, ['SepalLengthCm']].head()
out[10]: SepalLengthCm
        0    5.1
        1    4.9
        2    4.7
        3    4.6
        4    5.0

12. Фильтрация

In [11]:data[data['Species']=='Iris-virginica'].head()
out[11]:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species 
101     6.3          3.3        6.0           2.5     Iris-virginica 102     5.8          2.7        5.1           1.9     Iris-virginica 
103     7.1          3.0        5.9           2.1     Iris-virginica 
104     6.3          2.9        5.6           1.8     Iris-virginica 
105     6.5          3.0        5.8           2.2     Iris-virginica
In [12]:data[data['SepalLengthCm']>6.3].head()
out[12]:
Id SepalLengthCm  SepalWidthCm  PetalLengthCm PetalWidthCm  Species
51     7.0          3.2          4.7          1.4    Iris-versicolor 
52     6.4          3.2          4.5          1.5    Iris-versicolor
53     6.9          3.1          4.9          1.5    Iris-versicolor
55     6.5          2.8          4.6          1.5    Iris-versicolor
59     6.6          2.9          4.6          1.3    Iris-versicolor
In [12]:data[data['SepalLengthCm']<6.3].head()
out[12]:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species 
1    5.1           3.5          1.4           0.2       Iris-setosa
2    4.9           3.0          1.4           0.2       Iris-setosa
3    4.7           3.2          1.3           0.2       Iris-setosa
4    4.6           3.1          1.5           0.2       Iris-setosa
5    5.0           3.6          1.4           0.2       Iris-setosa

13. Управление фреймами данных в пандах

а) Переименование столбцов во фрейме данных

Переименовать столбцы можно легко в Pandas с помощью функции DataFrame rename ().

df.rename (columns = {«old_column_name»: «new_column_name»})

#Renaming one column
In [13]:data.rename(columns={'SepalLengthCm':'Sepal_Length'})
out[13]:
Id Sepal_Length SepalWidthCm PetalLengthCm PetalWidthCm  Species 
1    5.1           3.5          1.4           0.2       Iris-setosa
2    4.9           3.0          1.4           0.2       Iris-setosa
3    4.7           3.2          1.3           0.2       Iris-setosa
4    4.6           3.1          1.5           0.2       Iris-setosa
5    5.0           3.6          1.4           0.2       Iris-setosa
#Renaming multi-columns
In [14]:data.rename(columns={'SepalLengthCm':'Sepal_Length','SepalWidthCm':'Sepal_Width', 'PetalLengthCm':'Petal_Length','PetalWidthCm':'Petal_Width'})
out[13]:
Id Sepal_Length Sepal_Width Petal_Length Petal_Width     Species 
1    5.1           3.5          1.4           0.2       Iris-setosa
2    4.9           3.0          1.4           0.2       Iris-setosa
3    4.7           3.2          1.3           0.2       Iris-setosa
4    4.6           3.1          1.5           0.2       Iris-setosa
5    5.0           3.6          1.4           0.2       Iris-setosa

б) Удаление строк и столбцов во фрейме данных

Pandas использует функцию drop () »для удаления строк и столбцов из DataFrames.

df.drop (имя _или _names, ось = "столбцы" / 1 ИЛИ "строки" / 0)

i) Удаление столбцов из фрейма данных.

#delete the 'Id' column from the dataframe
In [15]:data.drop('Id',axis= 1).head()
#other method data.drop(columns="Id").head()
out[15]:
SepalLengthCm  SepalWidthCm  PetalLengthCm PetalWidthCm   Species 
    5.1           3.5          1.4           0.2       Iris-setosa
    4.9           3.0          1.4           0.2       Iris-setosa
    4.7           3.2          1.3           0.2       Iris-setosa
    4.6           3.1          1.5           0.2       Iris-setosa
    5.0           3.6          1.4           0.2       Iris-setosa
#Delete multiple columns from the dataframe
In [16]:data.drop(["Id","SepalWidthCm"],axis= 1).head()
out[16]:
SepalLengthCm   PetalLengthCm  PetalWidthCm     Species 
    5.1               1.4           0.2       Iris-setosa
    4.9               1.4           0.2       Iris-setosa
    4.7               1.3           0.2       Iris-setosa
    4.6               1.5           0.2       Iris-setosa
    5.0               1.4           0.2       Iris-setosa

ii) Чтобы удалить строки из DataFrame с помощью функции drop (), установите для оси значение 0.

# Delete the rows with labels 0,1
In [17]:data.drop([0,1],axis=0).head(3)
out[17]:
 Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species
 3    4.7           3.2          1.3           0.2       Iris-setosa
 4    4.6           3.1          1.5           0.2       Iris-setosa
 5    5.0           3.6          1.4           0.2       Iris-setosa
# Delete the first two rows using iloc selector
In[18]:data.iloc[2:,].head(3)
out[18]:
 Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species
 3    4.7           3.2          1.3           0.2       Iris-setosa
 4    4.6           3.1          1.5           0.2       Iris-setosa
 5    5.0           3.6          1.4           0.2       Iris-setosa

в) Работа с недостающими значениями

Во многих наборах данных отсутствуют значения, панды предоставляют несколько способов справиться с этим.

i) Поиск пропущенных значений

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

In [19]:data.isna().head(3)
out[19]:
Id  SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm  Species
False  False        False       False         False         False
False  False        False       False         False         False
False  False        False       False         False         False
#df.isna() returns the dataframe with boolean values indicating missing values.(True=missing value is present ,False= missing value is not present.)

Примечание. Вы также можете использовать notna (), который является полной противоположностью isna ().

Используя df.isna (). Sum (), вы можете получить количество пропущенных значений в каждом столбце.

In [20]:data.isna().sum()
out[20]:Id               0
SepalLengthCm    0
SepalWidthCm     0
PetalLengthCm    0
PetalWidthCm     0
Species          0
dtype: int64

ii) Отбросьте пропущенные значения.

Чтобы удалить строку или столбец с пропущенными значениями, в пандах есть функция dropna ().

df.dropna (axis = 0 или 1, how = "any" или "all")

  • ‘Any’: отбрасывать, если отсутствует какое-либо значение
  • ‘All’: отбрасывать, если все значения отсутствуют

iii) Замена отсутствующих значений

Чтобы заменить любое отсутствующее значение во фрейме данных, pandas предоставляет функцию fillna ().

14. Вычисление с помощью pandas DataFrame

а) Поэлементные математические операции в DataFrame

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

df + λ ( сложение, где λ - любое скалярное значение)

Аналогично, df - λ для вычитания, а df * λ для умножения

Example:
#adding 1 element-by-element in Column ="SepalLengthCm"
In [21]:data["SepalLengthCm"] + 1
out[21]:0      6.1
        1      5.9
        2      5.7
        3      5.6
        4      6.0
            ... 
        145    7.7
        146    7.3
        147    7.5
        148    7.2
        149    6.9
        Name: SepalLengthCm, Length: 150, dtype: float64
#similarly you can do other operatio

б) Статистические операции в DataFrame

i) count (): количество ненулевых наблюдений

Example:
In [23]:data["SepalLengthCm"].count()
out[23]:150

ii) sum (): сумма значений

Example:
In [24]:data["SepalLengthCm"].sum()
out[24]:876.5

iii) mean (): Среднее значение.

Example:
In [25]:data["SepalLengthCm"].mean()
out[25]:5.843333333333334

Другие важные сатистические функции в пандах: -

mad (): Среднее абсолютное отклонение

median (): арифметическая медиана значений

min (): Минимум

max (): Максимум

mode (): Режим

prod (): произведение значений

std (): стандартное отклонение выборки с поправкой на Бесселя.

var (): несмещенная дисперсия

sem (): стандартная ошибка среднего

skew (): пример асимметрии (3-й момент)

Курт (): Пример эксцесса (4-й момент)

quantile (): квантиль выборки (значение в%)

value_counts (): количество уникальных значений

15. Дополнительные полезные функции в Pandas

а) groupby () - эта функция используется для группировки данных в пандах

Example:
In [26]:data.groupby("Species").count()
out[26]:
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
Species
Iris-setosa  50     50           50            50             50
Iris-versicolor 50  50           50            50             50
Iris-virginica 50   50           50            50             50

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

Удачного кодирования 😃