#01 | Начало работы с пандами
Четкое введение в Pandas, библиотеку Python для работы с табличными данными, где вы можете открыть для себя ее многочисленные возможности и получить краткий обзор.
Прочитать исходную статью здесьв Хашноде.
Массив — это любой тип объекта, который может хранить более одного объекта. Например, list
:
[100, 134, 87, 99]
Допустим, мы говорим о доходах нашей электронной коммерции за последние 4 месяца:
list_revenue = [100, 134, 87, 99]
Мы хотим рассчитать общий доход (т.е. мы суммируем объекты в списке):
list_revenue.sum()
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Input In [3], in <cell line: 1>()
----> 1 list_revenue.sum() AttributeError: 'list' object has no attribute 'sum'
Список представляет собой бедный объект, который не содержит мощных функций.
Что мы можем сделать тогда?
Мы преобразуем список в мощный объект, такой как Series
который исходит из pandas
библиотека.
import pandas
pandas.Series(list_revenue)
>>>
0 100
1 134
2 87
3 99
dtype: int64
series_revenue = pandas.Series(list_revenue)
Теперь у нас есть мощный объект, который может выполнять .sum()
:
series_revenue.sum()
>>> 420
В серии мы можем найти больше объектов.
series_revenue
>>>
0 100
1 134
2 87
3 99
dtype: int64
series_revenue.index
>>> RangeIndex(start=0, stop=4, step=1)
Изменим элементы индекса:
series_revenue.index = ['1st Month', '2nd Month', '3rd Month', '4th Month']
series_revenue
>>>
1st Month 100
2nd Month 134
3rd Month 87
4th Month 99
dtype: int64
series_revenue.values
>>> array([100, 134, 87, 99])
series_revenue.name
Series
не содержит имени. Давайте определим это:
series_revenue.name="Revenue"
series_revenue
>>>
1st Month 100
2nd Month 134
3rd Month 87
4th Month 99
Name: Revenue, dtype: int64
Значения ряда (правая часть) определяются их тип данных (псевдоним dtype
):
series_revenue.dtype
>>> dtype('float64')
Давайте изменим dtype значений на float
(десятичные числа)
series_revenue.astype(float)
>>>
1st Month 100.0
2nd Month 134.0
3rd Month 87.0
4th Month 99.0
Name: Revenue, dtype: float64
series_revenue = series_revenue.astype(float)
Что еще мы могли бы сделать с объектом Series?
series_revenue.describe()
>>>
count 4.000000
mean 105.000000
std 20.215506
min 87.000000
25% 96.000000
50% 99.500000
75% 108.500000
max 134.000000
Name: Revenue, dtype: float64
series_revenue.plot.bar();
series_revenue.plot.barh();
series_revenue.plot.pie();
DataFrame
представляет собой набор Series.
Мы создадим еще одну серию series_expenses
чтобы позже собрать их вместе в DataFrame.
pandas.Series( data=[20, 23, 21, 18], index=['1st Month','2nd Month','3rd Month','4th Month'], name="Expenses"
)
>>>
1st Month 20
2nd Month 23
3rd Month 21
4th Month 18
Name: Expenses, dtype: int64
series_expenses = pandas.Series( data=[20, 23, 21, 18], index=['1st Month','2nd Month','3rd Month','4th Month'], name="Expenses"
)
pandas.DataFrame(data=[series_revenue, series_expenses])
df_shop = pandas.DataFrame(data=[series_revenue, series_expenses])
Давайте транспонируем DataFrame, чтобы иметь переменные в столбцах:
df_shop.transpose()
df_shop = df_shop.transpose()
df_shop.index
>>> Index(['1st Month', '2nd Month', '3rd Month', '4th Month'], dtype="object")
df_shop.columns
>>> Index(['Revenue', 'Expenses'], dtype="object")
df_shop.values
>>>
array([[100., 20.], [134., 23.], [87., 21.], [99., 18.]])
df_shop.shape
>>> (4, 2)
Что еще мы могли бы сделать с объектом DataFrame?
df_shop.describe()
df_shop.plot.bar();
df_shop.plot.pie(subplots=True);
df_shop.plot.line();
df_shop.plot.area();
Мы также можем экспортировать DataFrame в отформатированные файлы данных:
df_shop.to_excel('data.xlsx')
df_shop.to_csv('data.csv')
url="
pandas.read_json(url, orient="index")
df_football = pandas.read_json(url, orient="index")
df_football.Goals.plot.pie();
url="
pandas.read_json(path_or_buf=url, orient="index")
df_tennis = pandas.read_json(path_or_buf=url, orient="index")
df_tennis.style.background_gradient()
df_tennis.plot.pie(subplots=True, layout=(2,3), figsize=(10,6));
HTML веб-страница
pandas.read_html(' index_col="Team")[0]
df_laliga = pandas.read_html(' index_col="Team")[0]
df_laliga.Pts.plot.barh();
df_laliga.Pts.sort_values().plot.barh();
url="
pandas.read_csv(filepath_or_buffer=url)
df_internet = pandas.read_csv(filepath_or_buffer=url)
df_internet.hist();
df_internet.pivot_table(index='education', columns="internet_usage", aggfunc="size")
dfres = df_internet.pivot_table(index='education', columns="internet_usage", aggfunc="size")
dfres.style.background_gradient('Greens', axis=1)
Эта работа распространяется под лицензией Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 Международная лицензия.