Часто после чтения данных с помощью read_csv() хочется убедиться в правильности чтения или, к примеру, посмотреть, что лежит в наборе данных.
Для этого используются методы .head() или .tail(), которые показывают первые или последние 5 строк таблицы. Количество строк можно менять параметром n, передаваемым в функцию.
Посмотрим, как они работают, на примере уже запомнившегося нам набора данных о футболистах:
import pandas as pdurl ="https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/football.csv"football = pd.read_csv(url)football.head()
Unnamed: 0
Name
Age
Nationality
Club
Value
Wage
Position
Crossing
Finishing
...
Penalties
Composure
Marking
StandingTackle
SlidingTackle
GKDiving
GKHandling
GKKicking
GKPositioning
GKReflexes
0
0
L. Messi
31
Argentina
FC Barcelona
110500000
565000
RF
84
95
...
75
96
33
28
26
6
11
15
14
8
1
1
Cristiano Ronaldo
33
Portugal
Juventus
77000000
405000
ST
84
94
...
85
95
28
31
23
7
11
15
14
11
2
2
Neymar Jr
26
Brazil
Paris Saint-Germain
118500000
290000
LW
79
87
...
81
94
27
24
33
9
9
15
15
11
3
3
De Gea
27
Spain
Manchester United
72000000
260000
GK
17
13
...
40
68
15
21
13
90
85
87
88
94
4
4
K. De Bruyne
27
Belgium
Manchester City
102000000
355000
RCM
93
82
...
79
88
68
58
51
15
13
5
10
13
5 rows × 42 columns
import pandas as pdfootball = pd.read_csv(url)football.info()
Метод describe показывает основные статистические характеристики данных по каждому числовому признаку (типы int64 и float64): число непропущенных значений, среднее, стандартное отклонение, диапазон, медиану, 0.25 и 0.75 квартили.
import pandas as pdfootball = pd.read_csv(url)football.describe()
Unnamed: 0
Age
Value
Wage
Crossing
Finishing
HeadingAccuracy
ShortPassing
Volleys
Dribbling
...
Penalties
Composure
Marking
StandingTackle
SlidingTackle
GKDiving
GKHandling
GKKicking
GKPositioning
GKReflexes
count
12897.000000
12897.000000
1.289700e+04
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
...
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
12897.000000
mean
6605.040862
24.795379
2.112449e+06
7517.562224
47.076374
42.876328
50.202528
56.026983
40.295030
52.461735
...
46.459874
55.942932
45.655811
46.186710
44.386679
17.218345
16.962317
16.797938
16.950221
17.315965
std
3782.545526
4.872212
6.498424e+06
23061.985387
18.043470
19.096935
17.281593
14.740436
17.080687
18.871643
...
15.479313
11.280631
19.456346
21.172586
20.726546
18.085618
17.349624
16.971411
17.369297
18.335817
min
0.000000
16.000000
0.000000e+00
1000.000000
5.000000
2.000000
4.000000
7.000000
4.000000
4.000000
...
5.000000
12.000000
3.000000
2.000000
3.000000
1.000000
1.000000
1.000000
1.000000
1.000000
25%
3357.000000
21.000000
2.500000e+05
1000.000000
35.000000
28.000000
43.000000
50.000000
28.000000
45.000000
...
37.000000
49.000000
29.000000
25.000000
23.000000
8.000000
8.000000
8.000000
8.000000
8.000000
50%
6622.000000
24.000000
5.000000e+05
2000.000000
51.000000
45.000000
54.000000
60.000000
41.000000
58.000000
...
47.000000
56.000000
51.000000
54.000000
51.000000
11.000000
11.000000
11.000000
11.000000
11.000000
75%
9876.000000
28.000000
8.500000e+05
4000.000000
61.000000
59.000000
62.000000
65.000000
53.000000
65.000000
...
58.000000
63.000000
62.000000
64.000000
62.000000
14.000000
14.000000
14.000000
14.000000
14.000000
max
13125.000000
45.000000
1.185000e+08
565000.000000
93.000000
95.000000
94.000000
93.000000
90.000000
97.000000
...
91.000000
96.000000
93.000000
93.000000
91.000000
90.000000
92.000000
91.000000
90.000000
94.000000
8 rows × 38 columns
Здесь для каждого числового (int64) столбца показано число непустых значений (count), среднее (mean), стандартное отклонение (std), минимум и максимум (min и max), 25% и 75% квартили и медиана (50%).
Чтобы посмотреть статистику по нечисловым признакам (например, по строчным (object) или булевым (bool) данным), нужно явно указать интересующие нас типы в параметре include метода describe:
football.describe(include=['object'])
Name
Nationality
Club
Position
count
12897
12897
12897
12897
unique
12326
156
650
27
top
J. Rodríguez
England
V-Varen Nagasaki
GK
freq
9
1368
30
1641
Здесь для каждой колонки с типом object (строчные данные) выводится количество непустых строк, уникальных значений, самое частое значение (top) и частота этого значения (freq).
Для вычисления отдельных статистических параметров DataFrame можно использовать не только метод .describe(), но и отдельные методы для каждого параметра:
Метод
Статистический параметр
.max()
Максимум
.min()
Минимум
.mean()
Среднее значение
.sum()
Сумма
.count()
Количество непустых элементов
.std()
Стандартное отклонение
Если один из этих методов применить ко всему DataFrame, то в результате его работы будет получен объект типа Series. В случае применения метода к отдельному столбцу, результатом вычислений станет число (среднее значение элементов столбца, минимум, максимум и т.п.).
В каждый метод можно передать некоторые параметры, среди которых:
axis — определяет, подсчитывать максимум по строкам (1) или по столбцам (0) (по умолчанию 0);
numeric_only — определяет, вычислять параметры только по числовым столбцам/строкам или нет (True/False). Если передать False в методы .mean() или .std(), компилятор выдаст ошибку.
Пример применения:
df = pd.DataFrame([[i, i +1.2, i +2, 'hi'] for i inrange(10)], columns=['foo', 'bar', 'baz', 'foobar'])df
foo
bar
baz
foobar
0
0
1.2
2
hi
1
1
2.2
3
hi
2
2
3.2
4
hi
3
3
4.2
5
hi
4
4
5.2
6
hi
5
5
6.2
7
hi
6
6
7.2
8
hi
7
7
8.2
9
hi
8
8
9.2
10
hi
9
9
10.2
11
hi
df.mean()
Здесь вычисляется среднее по столбцам (так как не передан параметр axis), причем только по числовым столбцам, так как метод .mean() не может применяться к столбцам с другим типом.
Доступ к колонке можно получить разными способами: df['column_name'] или df.column_name.
Например, так:
df = pd.DataFrame([[i, i +1.2, i +2, 'hi'] for i inrange(10)], columns=['foo', 'bar', 'baz', 'foobar'])df['foo']
Как мы помним, колонки в DataFrame представляют собой Series, поэтому к ним можно применять методы .max(), .std() и другие.
df = pd.DataFrame([[i, i +1.2, i +2, 'hi'] for i inrange(10)], columns=['foo', 'bar', 'baz', 'foobar'])df.bar.mean()
5.7
Для следующего блока задач потребуется открыть уже известный набор данных о футболистах.
Задание 1
Чему равен средний возраст (Age), футболистов в наборе данных, округлённый до целого?
Задание 2
Каково количество непустых строк в колонке Composure (Хладнокровие) набора данных о футболистах?
Задание 3
Каково в наборе данных о футболистах стандартное отклонение параметра коротких пасов (ShortPassing), округлённое до второго знака после запятой?
Задание 4
Какова сумма заработных плат за год (Wage) в наборе данных о футболистах?
Задание 5
Какова минимальная стоимость футболиста (Value) в наборе данных о футболистах?
Часто возникает необходимость выбрать данные из DataFrame по определённому условию. Например, если в уже известном нам наборе данных о футболистах мы хотим выбрать только тех, у кого возраст больше 20 лет, используется следующий код:
import pandas as pdurl ="https://raw.githubusercontent.com/dm-fedorov/pandas_basic/master/data/football.csv"football = pd.read_csv(url)
football[football.Age >20]
Unnamed: 0
Name
Age
Nationality
Club
Value
Wage
Position
Crossing
Finishing
...
Penalties
Composure
Marking
StandingTackle
SlidingTackle
GKDiving
GKHandling
GKKicking
GKPositioning
GKReflexes
0
0
L. Messi
31
Argentina
FC Barcelona
110500000
565000
RF
84
95
...
75
96
33
28
26
6
11
15
14
8
1
1
Cristiano Ronaldo
33
Portugal
Juventus
77000000
405000
ST
84
94
...
85
95
28
31
23
7
11
15
14
11
2
2
Neymar Jr
26
Brazil
Paris Saint-Germain
118500000
290000
LW
79
87
...
81
94
27
24
33
9
9
15
15
11
3
3
De Gea
27
Spain
Manchester United
72000000
260000
GK
17
13
...
40
68
15
21
13
90
85
87
88
94
4
4
K. De Bruyne
27
Belgium
Manchester City
102000000
355000
RCM
93
82
...
79
88
68
58
51
15
13
5
10
13
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
12838
13067
D. Mackay
21
Scotland
Kilmarnock
30000
1000
GK
14
20
...
24
30
12
18
18
48
50
47
48
48
12857
13086
Wu Lei
21
China PR
Tianjin Quanjian FC
9000000
2000
LDM
52
29
...
46
39
52
40
49
8
15
11
8
5
12861
13090
Y. Uchimura
33
Japan
Hokkaido Consadole Sapporo
20000
1000
CAM
51
31
...
33
62
45
48
42
13
15
7
15
15
12870
13099
M. Hurst
22
Scotland
St. Johnstone FC
40000
1000
GK
19
15
...
29
28
12
15
16
45
49
50
50
45
12873
13102
K. Pilkington
44
England
Cambridge United
0
1000
GK
11
12
...
22
56
15
15
13
45
48
44
49
46
10025 rows × 42 columns
Синтаксис этой конструкции достаточно прост. Внутри квадратных скобок передается список из True или False, который показывает, какие строки DataFrame нужно оставить, а какие убрать. Этот список генерируется сравнением Seriesfootball.Age с 20.
Можно для фильтрации использовать и методы получения статистических параметров. Например, если нам нужны только те футболисты, возраст которых больше среднего возраста футболистов, можно использовать следующую конструкцию:
football[football.Age > football.Age.mean()]
Unnamed: 0
Name
Age
Nationality
Club
Value
Wage
Position
Crossing
Finishing
...
Penalties
Composure
Marking
StandingTackle
SlidingTackle
GKDiving
GKHandling
GKKicking
GKPositioning
GKReflexes
0
0
L. Messi
31
Argentina
FC Barcelona
110500000
565000
RF
84
95
...
75
96
33
28
26
6
11
15
14
8
1
1
Cristiano Ronaldo
33
Portugal
Juventus
77000000
405000
ST
84
94
...
85
95
28
31
23
7
11
15
14
11
2
2
Neymar Jr
26
Brazil
Paris Saint-Germain
118500000
290000
LW
79
87
...
81
94
27
24
33
9
9
15
15
11
3
3
De Gea
27
Spain
Manchester United
72000000
260000
GK
17
13
...
40
68
15
21
13
90
85
87
88
94
4
4
K. De Bruyne
27
Belgium
Manchester City
102000000
355000
RCM
93
82
...
79
88
68
58
51
15
13
5
10
13
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
12746
12975
Teng Shangkun
27
China PR
Tianjin TEDA FC
20000
1000
GK
10
8
...
17
58
28
10
13
46
56
55
45
53
12749
12978
M. Mansour
26
Saudi Arabia
Al Batin
30000
2000
LB
36
18
...
33
37
45
54
54
10
8
6
13
13
12767
12996
Sun Qibin
26
China PR
Tianjin Quanjian FC
20000
2000
GK
14
7
...
12
30
46
11
10
50
46
51
48
50
12861
13090
Y. Uchimura
33
Japan
Hokkaido Consadole Sapporo
20000
1000
CAM
51
31
...
33
62
45
48
42
13
15
7
15
15
12873
13102
K. Pilkington
44
England
Cambridge United
0
1000
GK
11
12
...
22
56
15
15
13
45
48
44
49
46
6191 rows × 42 columns
Условия можно и комбинировать, используя операторы & (логическое и) и | (логическое или). Условия при этом заключаются в скобки. Например, если мы хотим получить только тех футболистов, у которых возраст меньше среднего, или игроков 'FC Barcelona':
Статистические параметры можно посчитать и по отфильтрованному DataFrame, например среднюю заработную плату футболистов с возрастом меньше среднего и из 'FC Barcelona':
Здесь мы получили среднюю заработную плату за год футболистов с возрастом ниже среднего или из клуба FC Barcelona.
Задание 6
Какова средняя скорость (SprintSpeed) футболистов, зарплата (Wage) которых выше среднего? Ответ округлите до сотых.
Задание 7
Какова средняя скорость (SprintSpeed) футболистов, зарплата (Wage) которых ниже среднего? Ответ округлите до сотых.
Задание 8
Какую позицию (Position) занимает футболист с самой высокой зарплатой (Wage)?
Задание 9
Сколько пенальти (Penalties) забили бразильские (Nationality, Brazil) футболисты за период, данные о котором представлены в датасете?
Задание 10
Укажите средний возраст (Age) игроков, у которых точность удара головой (HeadingAccuracy) > 50. Ответ округлите до сотых.
Задание 11
Укажите возраст (Age) самого молодого игрока, у которого хладнокровие (Composure) и реакция (Reactions) превышают 90% от максимального значения, представленного в датасете.
Задание 12
Определите, насколько средняя реакция (Reactions) самых взрослых игроков (т.е. игроков, чей возраст (Age) равен максимальному) больше средней реакции самых молодых игроков. Ответ округлите до сотых.
Задание 13
Из какой страны (Nationality) происходит больше всего игроков, чья стоимость (Value) превышает среднее значение?
Задание 14
Определите, во сколько раз средняя зарплата (Wage) голкипера (Position, GK) с максимальным значением показателя “Рефлексы” (GKReflexes) выше средней зарплаты голкипера с максимальным значением показателя “Владение мячом” (GKHandling). Ответ округлите до сотых.
Задание 15
Определите, во сколько раз средняя сила удара (ShotPower) самых агрессивных игроков (игроков с максимальным значением показателя “Агрессивность” (Aggression)) выше силы удара игроков с минимальной агрессией. Ответ округлите до сотых.