![](/user_photo/70644__xXXN.png)
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz1x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
Датафреймы pandas
Продолжим работать с таблицами в Python. Для начала импортируем саму библиотеку.
In [2]:
import pandas as pd
Загрузим таблицу:
In [3]:
df = pd.read_csv("http://math-info.hse.ru/f/2017-18/py-prog/scores2.csv")
И посмотрим на её структуру более внимательно. Выберем первый столбец с id:
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
1/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz2x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
In [4]:
df['id']
Out[4]:
0М141БПЛТЛ024
1М141БПЛТЛ031
2М141БПЛТЛ075
3М141БПЛТЛ017
4М141БПЛТЛ069
5М141БПЛТЛ072
6М141БПЛТЛ020
7М141БПЛТЛ026
8М141БПЛТЛ073
9М141БПЛТЛ078
10М141БПЛТЛ060
11М141БПЛТЛ040
12М141БПЛТЛ065
13М141БПЛТЛ053
14М141БПЛТЛ015
15М141БПЛТЛ021
16М141БПЛТЛ018
17М141БПЛТЛ039
18М141БПЛТЛ036
19М141БПЛТЛ049
2006114043
21М141БПЛТЛ048
22М141БПЛТЛ034
23М141БПЛТЛ045
24М141БПЛТЛ033
25М141БПЛТЛ083
26М141БПЛТЛ008
27М141БПЛТЛ001
28М141БПЛТЛ038
29М141БПЛТЛ052
30М141БПЛТЛ011
31М141БПЛТЛ004
32М141БПЛТЛ010
33М141БПЛТЛ071
34М141БПЛТЛ035
35М141БПЛТЛ030
36М141БПЛТЛ070
37М141БПЛТЛ051
38М141БПЛТЛ046
39М141БПЛТЛ047
40М141БПЛТЛ063
41М141БПЛТЛ029
42М141БПЛТЛ064
43М141БПЛТЛ076
44М141БПЛТЛ062
45М141БПЛТЛ074
46130232038
47М141БПЛТЛ023
48М141БПЛТЛ054
49М141БПЛТЛ012
50М141БПЛТЛ006
51М141БПЛТЛ055
52М141БПЛТЛ007
53М141БПЛТЛ050
54М141БПЛТЛ066
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
2/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz3x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
55М141БПЛТЛ043
56М141БПЛТЛ084
57М141БПЛТЛ005
58М141БПЛТЛ044
5913051038
Name: id, dtype: object
Столбец датафрейма df имеет особый тип Series. Внешне Series отличается от обычного списка значений, потому что, во-первых, при вызове столбца на экран выводятся не только сами элементы, но их номер (номер строки), а во-вторых, на экран выводится строка с названием столбца ( Name: id ) и его тип ( dtype: object , текстовый). Первая особенность роднит Series со словарями: он представляет собой пары ключ-значение, то есть номер-значение. Вторая особенность роднит Series с массивами numpy : элементы обычно должны быть одного типа.
Библиотеку numpy мы еще не обсуждали, но обязательно обсудим позже, так как во многих задачах использовать массивы numpy гораздо удобнее, чем списки.
Можно вывести первые или последние строки таблицы, используя методы .head() и .tail() .
In [8]:
df.head()
Out[8]:
|
|
id |
catps |
mstat |
soc |
econ |
eng |
polth |
mstat2 |
phist |
law |
phil |
polsoc |
pthe |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
М141БПЛТЛ024 |
7 |
9 |
8 |
8 |
9 |
8 |
10 |
8.0 |
7 |
9 |
9 |
7 |
|
1 |
М141БПЛТЛ031 |
8 |
10 |
10 |
10 |
10 |
10 |
10 |
9.0 |
9 |
10 |
10 |
9 |
|
2 |
М141БПЛТЛ075 |
9 |
9 |
9 |
10 |
9 |
10 |
9 |
8.0 |
9 |
10 |
9 |
9 |
|
3 |
М141БПЛТЛ017 |
9 |
9 |
8 |
8 |
9 |
9 |
10 |
6.0 |
9 |
9 |
9 |
8 |
|
4 |
М141БПЛТЛ069 |
10 |
10 |
10 |
10 |
10 |
10 |
9 |
8.0 |
8 |
10 |
9 |
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In [9]:
df.tail()
Out[9]:
|
|
|
id |
catps |
mstat |
soc |
econ |
eng |
polth |
mstat2 |
phist |
law |
phil |
polsoc |
pth |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
М141БПЛТЛ043 |
5 |
5 |
6 |
5 |
8 |
5 |
6 |
5.0 |
6 |
4 |
5 |
|
||
56 |
М141БПЛТЛ084 |
6 |
7 |
8 |
4 |
8 |
5 |
5 |
NaN |
8 |
4 |
4 |
|
||
57 |
М141БПЛТЛ005 |
5 |
7 |
5 |
5 |
7 |
4 |
7 |
4.0 |
5 |
4 |
5 |
|
||
58 |
М141БПЛТЛ044 |
4 |
5 |
7 |
4 |
6 |
4 |
4 |
5.0 |
4 |
4 |
4 |
|
||
59 |
13051038 |
5 |
4 |
4 |
4 |
9 |
5 |
5 |
5.0 |
5 |
4 |
4 |
N |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Внимание: это просто первые и последние строки таблицы «как есть». Никакой сортировки не происходит!
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
3/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz4x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
По умолчанию эти методы выводят пять строк, но при желании это легко изменить. Достаточно в скобках указать желаемое число строк.
In [6]:
df.head(10) # первые 10 строк
Out[6]:
|
|
id |
catps |
mstat |
soc |
econ |
eng |
polth |
mstat2 |
phist |
law |
phil |
polsoc |
pthe |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
М141БПЛТЛ024 |
7 |
9 |
8 |
8 |
9 |
8 |
10 |
8.0 |
7 |
9 |
9 |
7 |
|
1 |
М141БПЛТЛ031 |
8 |
10 |
10 |
10 |
10 |
10 |
10 |
9.0 |
9 |
10 |
10 |
9 |
|
2 |
М141БПЛТЛ075 |
9 |
9 |
9 |
10 |
9 |
10 |
9 |
8.0 |
9 |
10 |
9 |
9 |
|
3 |
М141БПЛТЛ017 |
9 |
9 |
8 |
8 |
9 |
9 |
10 |
6.0 |
9 |
9 |
9 |
8 |
|
4 |
М141БПЛТЛ069 |
10 |
10 |
10 |
10 |
10 |
10 |
9 |
8.0 |
8 |
10 |
9 |
7 |
|
5 |
М141БПЛТЛ072 |
10 |
9 |
8 |
10 |
9 |
8 |
9 |
8.0 |
8 |
10 |
9 |
7 |
|
6 |
М141БПЛТЛ020 |
8 |
7 |
7 |
6 |
9 |
10 |
8 |
8.0 |
7 |
7 |
9 |
7 |
|
7 |
М141БПЛТЛ026 |
7 |
10 |
8 |
7 |
10 |
7 |
9 |
8.0 |
8 |
8 |
8 |
8 |
|
8 |
М141БПЛТЛ073 |
7 |
9 |
8 |
8 |
9 |
8 |
9 |
8.0 |
8 |
9 |
9 |
7 |
|
9 |
М141БПЛТЛ078 |
6 |
6 |
9 |
5 |
6 |
10 |
7 |
6.0 |
8 |
6 |
9 |
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Давайте кое-что подкорректруем. Сделаем так, чтобы строки в таблице назывались в соответствии с id . Другими словами, сделаем так, чтобы первый столбец считался индексом строки:
In [7]:
df = pd.read_csv("http://math-info.hse.ru/f/2017-18/py-prog/scores2.csv", index_col = 0)
In [8]:
df.head() # теперь так
Out[8]:
|
|
|
catps |
mstat |
soc |
econ |
eng |
polth |
mstat2 |
phist |
law |
phil |
polsoc |
ptheo |
|
|
id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
М141БПЛТЛ024 |
7 |
9 |
8 |
8 |
9 |
8 |
10 |
8.0 |
7 |
9 |
9 |
7.0 |
|
|
М141БПЛТЛ031 |
8 |
10 |
10 |
10 |
10 |
10 |
10 |
9.0 |
9 |
10 |
10 |
9.0 |
|
|
М141БПЛТЛ075 |
9 |
9 |
9 |
10 |
9 |
10 |
9 |
8.0 |
9 |
10 |
9 |
9.0 |
|
|
М141БПЛТЛ017 |
9 |
9 |
8 |
8 |
9 |
9 |
10 |
6.0 |
9 |
9 |
9 |
8.0 |
|
|
М141БПЛТЛ069 |
10 |
10 |
10 |
10 |
10 |
10 |
9 |
8.0 |
8 |
10 |
9 |
7.0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Иногда такой подход может быть полезен. Представьте, что все переменные в таблице, кроме id, измерены в количественной шкале, и мы планируем реализовать на них статистический метод, который работает исключительно с числовыми данными. Если мы просто выкинем столбец с id, мы потеряем информацию о наблюдении, если мы его оставим, нам придется собирать в отдельную таблицу
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
4/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz5x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
показатели, к которым будем применять метод, так как сохраненный в исходной таблице текст будет мешать. Если же мы назовем строки в соответствии с id, мы убьем сразу двух зайцев: избавимся от столбца с текстом и не потеряем информацию о наблюдении (код, имя респондента, название страны и прочее).
Когда таблица большая, увидеть все столбцы разом не получится. Поэтому полезно знать, как получить список названий столбцов.
In [9]:
df.columns
Out[9]:
Index(['catps', 'mstat', 'soc', 'econ', 'eng', 'polth', 'mstat2', 'phist', 'law', 'phil', 'polsoc', 'ptheo', 'preg', 'compp', 'game', 'wpol', 'male'],
dtype='object')
Обратите внимание: полученный объект не является обычным списком:
In [10]:
type(df.columns) # это Index из pandas
Out[10]:
pandas.core.indexes.base.Index
Чтобы получить список названий, достаточно сконвертировать тип с помощью привычного list() :
In [11]:
c = list(df.columns) print(c)
['catps', 'mstat', 'soc', 'econ', 'eng', 'polth', 'mstat2', 'phist', 'law', 'phil', 'polsoc', 'ptheo', 'preg', 'compp', 'game', 'wpol', 'male']
Аналогичная история со строками:
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
5/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz6x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
In [12]:
df.index
Out[12]:
Index(['М141БПЛТЛ024', 'М141БПЛТЛ031', 'М141БПЛТЛ075', 'М141БПЛТЛ017', 'М141БПЛТЛ069', 'М141БПЛТЛ072', 'М141БПЛТЛ020', 'М141БПЛТЛ026', 'М141БПЛТЛ073', 'М141БПЛТЛ078', 'М141БПЛТЛ060', 'М141БПЛТЛ040', 'М141БПЛТЛ065', 'М141БПЛТЛ053', 'М141БПЛТЛ015', 'М141БПЛТЛ021', 'М141БПЛТЛ018', 'М141БПЛТЛ039', 'М141БПЛТЛ036', 'М141БПЛТЛ049', '06114043', 'М141БПЛТЛ048', 'М141БПЛТЛ034', 'М141БПЛТЛ045', 'М141БПЛТЛ033', 'М141БПЛТЛ083', 'М141БПЛТЛ008', 'М141БПЛТЛ001', 'М141БПЛТЛ038', 'М141БПЛТЛ052', 'М141БПЛТЛ011', 'М141БПЛТЛ004', 'М141БПЛТЛ010', 'М141БПЛТЛ071', 'М141БПЛТЛ035', 'М141БПЛТЛ030', 'М141БПЛТЛ070', 'М141БПЛТЛ051', 'М141БПЛТЛ046', 'М141БПЛТЛ047', 'М141БПЛТЛ063', 'М141БПЛТЛ029', 'М141БПЛТЛ064', 'М141БПЛТЛ076', 'М141БПЛТЛ062', 'М141БПЛТЛ074', '130232038', 'М141БПЛТЛ023', 'М141БПЛТЛ054', 'М141БПЛТЛ012', 'М141БПЛТЛ006', 'М141БПЛТЛ055', 'М141БПЛТЛ007', 'М141БПЛТЛ050', 'М141БПЛТЛ066', 'М141БПЛТЛ043', 'М141БПЛТЛ084', 'М141БПЛТЛ005', 'М141БПЛТЛ044', '13051038'],
dtype='object', name='id')
Переименование столбцов и строк
Раз названия столбцов можно вывести в виде некоторого перечня, то этот перечень можно редактировать. Посмотрим на названия столбцов ещё раз.
In [13]:
df.columns
Out[13]:
Index(['catps', 'mstat', 'soc', 'econ', 'eng', 'polth', 'mstat2', 'phist', 'law', 'phil', 'polsoc', 'ptheo', 'preg', 'compp', 'game', 'wpol', 'male'],
dtype='object')
Давайте переименуем переменную catps в cps , чтобы думать о политической науке, а не о котах :) Для этого сохраним названия в список my_cols и изменим в списке первый элемент:
In [14]:
my_cols = list(df.columns) my_cols[0] = "cps"
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
6/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz7x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
In [15]:
df.columns = my_cols # сохраним изменения в самой базе df df.columns # все обновилось!
Out[15]:
Index(['cps', 'mstat', 'soc', 'econ', 'eng', 'polth', 'mstat2', 'phist', 'la w',
'phil', 'polsoc', 'ptheo', 'preg', 'compp', 'game', 'wpol', 'male'], dtype='object')
Обратите внимание: для того, чтобы изменить одно или несколько названий, совсем необязательно создавать новый список «с нуля». Достаточно определить индексы нужных элементов и поправить только необходимые названия.
Точно так же можно было поступить со строками. Но давайте лучше попробуем внести изменения в названия всех столбцов: сделаем так, чтобы все названия столбцов начинались с большой буквы. Для начала напишем функцию, которая принимает на вход датафрейм, обращается к его столбцам и переименовывает их, делая первую букву заглавной.
In [16]:
def rename_cols(df):
oldnames = list(df.columns) # список старых названий
newnames = [i.capitalize() for i in oldnames] # список новых названий df.columns = newnames # сохранение изменений
return df
Теперь применим нашу функцию rename_cols() к базе df :
In [17]:
df2 = rename_cols(df) df2.head()
Out[17]:
|
|
|
Cps |
Mstat |
Soc |
Econ |
Eng |
Polth |
Mstat2 |
Phist |
Law |
Phil |
Polsoc |
Ptheo |
|
|
id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
М141БПЛТЛ024 |
7 |
9 |
8 |
8 |
9 |
8 |
10 |
8.0 |
7 |
9 |
9 |
7.0 |
|
|
М141БПЛТЛ031 |
8 |
10 |
10 |
10 |
10 |
10 |
10 |
9.0 |
9 |
10 |
10 |
9.0 |
|
|
М141БПЛТЛ075 |
9 |
9 |
9 |
10 |
9 |
10 |
9 |
8.0 |
9 |
10 |
9 |
9.0 |
|
|
М141БПЛТЛ017 |
9 |
9 |
8 |
8 |
9 |
9 |
10 |
6.0 |
9 |
9 |
9 |
8.0 |
|
|
М141БПЛТЛ069 |
10 |
10 |
10 |
10 |
10 |
10 |
9 |
8.0 |
8 |
10 |
9 |
7.0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Кажется, что таким способом мы сохранили изменения в новой базе df2 , а старую базу df не тронули. Однако, если мы посмотрим на базу df , мы увидим, что она тоже изменилась!
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
7/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz8x1.jpg)
12.11.2022, 11:38 10. Датафреймы pandas - Jupyter Notebook
In [18]: df.head() Out[18]:
|
|
|
Cps |
Mstat |
Soc |
Econ |
Eng |
Polth |
Mstat2 |
Phist |
Law |
Phil |
Polsoc |
Ptheo |
|
|
id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
М141БПЛТЛ024 |
7 |
9 |
8 |
8 |
9 |
8 |
10 |
8.0 |
7 |
9 |
9 |
7.0 |
|
|
М141БПЛТЛ031 |
8 |
10 |
10 |
10 |
10 |
10 |
10 |
9.0 |
9 |
10 |
10 |
9.0 |
|
|
М141БПЛТЛ075 |
9 |
9 |
9 |
10 |
9 |
10 |
9 |
8.0 |
9 |
10 |
9 |
9.0 |
|
|
М141БПЛТЛ017 |
9 |
9 |
8 |
8 |
9 |
9 |
10 |
6.0 |
9 |
9 |
9 |
8.0 |
|
|
М141БПЛТЛ069 |
10 |
10 |
10 |
10 |
10 |
10 |
9 |
8.0 |
8 |
10 |
9 |
7.0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Почему это произошло? Потому что датафреймы являются изменяемой структурой данных (да-да, как списки). Поэтому, применяя методы к объекту типа DataFrame , мы меняем исходный датафрейм, и к этому надо быть готовым. Если вы не планируете вносить изменения в исходную базу, имеет смысл сделать её копию и работать с ней. Например, вот так:
In [19]:
# метод copy df_new = df.copy()
# вносим изменения в df_new - переименовываем один столбец new_cols = list(df_new.columns)
new_cols[1] = "Matstat" df_new.columns = new_cols
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
8/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz9x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
In [20]:
# сравниваем
print(df.head(2))
print("\n") # для пустой строчки между df и df_new print(df_new.head(2))
id |
Cps |
Mstat Soc Econ |
Eng |
Polth |
Mstat2 |
Phist |
Law |
Phil \ |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
М141БПЛТЛ024 |
7 |
|
9 |
8 |
8 |
9 |
8 |
|
10 |
8.0 |
7 |
9 |
||
М141БПЛТЛ031 |
8 |
|
10 |
10 |
10 |
10 |
10 |
|
10 |
9.0 |
9 |
10 |
||
id |
Polsoc |
Ptheo |
Preg |
Compp |
Game |
Wpol |
Male |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
М141БПЛТЛ024 |
|
9 |
7.0 |
8 |
|
8.0 |
6 |
10 |
|
1 |
|
|
|
|
М141БПЛТЛ031 |
|
10 |
9.0 |
8 |
|
8.0 |
9 |
10 |
|
1 |
|
|
|
|
\ |
|
Cps |
Matstat |
Soc |
Econ |
Eng |
Polth Mstat2 |
Phist |
Law |
Phil |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
М141БПЛТЛ024 |
7 |
|
9 |
8 |
8 |
9 |
|
8 |
10 |
8.0 |
7 |
9 |
||
М141БПЛТЛ031 |
8 |
|
10 |
10 |
10 |
10 |
|
10 |
10 |
9.0 |
9 |
10 |
||
id |
Polsoc |
Ptheo |
Preg |
Compp |
Game |
Wpol |
Male |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
М141БПЛТЛ024 |
|
9 |
7.0 |
8 |
|
8.0 |
6 |
10 |
|
1 |
|
|
|
|
М141БПЛТЛ031 |
|
10 |
9.0 |
8 |
|
8.0 |
9 |
10 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обратите внимание: создать копию обычным присваиванием не получится, код вида df_new = df создаст новую ссылку на датафрейм, но не новый датафрейм. Поэтому при изменении df_new база df также изменится (вспомните историю о коварстве списков).
Выбор столбцов и строк таблицы
Выбор столбцов по названию
Часто удобнее всего выбирать столбец по названию. Для этого достаточно указать название столбца в квадратных скобках (и обязательно в кавычках, так как название является строкой):
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
9/42 |
![](/html/70644/137/html_IA_8JiJX_N.YG8E/htmlconvd-whwiGz10x1.jpg)
12.11.2022, 11:38 |
10. Датафреймы pandas - Jupyter Notebook |
In [21]:
df['Mstat']
Out[21]:
id
М141БПЛТЛ024 9 М141БПЛТЛ031 10 М141БПЛТЛ075 9 М141БПЛТЛ017 9 М141БПЛТЛ069 10 М141БПЛТЛ072 9 М141БПЛТЛ020 7 М141БПЛТЛ026 10 М141БПЛТЛ073 9 М141БПЛТЛ078 6 М141БПЛТЛ060 8 М141БПЛТЛ040 9 М141БПЛТЛ065 9 М141БПЛТЛ053 7 М141БПЛТЛ015 9 М141БПЛТЛ021 9 М141БПЛТЛ018 7 М141БПЛТЛ039 8 М141БПЛТЛ036 10 М141БПЛТЛ049 7 06114043 8 М141БПЛТЛ048 6 М141БПЛТЛ034 9 М141БПЛТЛ045 8 М141БПЛТЛ033 9 М141БПЛТЛ083 5 М141БПЛТЛ008 8 М141БПЛТЛ001 7 М141БПЛТЛ038 9 М141БПЛТЛ052 7 М141БПЛТЛ011 6 М141БПЛТЛ004 7 М141БПЛТЛ010 6 М141БПЛТЛ071 9 М141БПЛТЛ035 6 М141БПЛТЛ030 6 М141БПЛТЛ070 5 М141БПЛТЛ051 9 М141БПЛТЛ046 7 М141БПЛТЛ047 8 М141БПЛТЛ063 5 М141БПЛТЛ029 8 М141БПЛТЛ064 8 М141БПЛТЛ076 7 М141БПЛТЛ062 7 М141БПЛТЛ074 6 130232038 7 М141БПЛТЛ023 9 М141БПЛТЛ054 8 М141БПЛТЛ012 6 М141БПЛТЛ006 5 М141БПЛТЛ055 5 М141БПЛТЛ007 7 М141БПЛТЛ050 6
127.0.0.1:8888/notebooks/EXONTOOLS/2/Доп. занятия/10. Датафреймы pandas.ipynb |
10/42 |