<jupyter_start><jupyter_text>Основы pandas<jupyter_code>import pandas as pd<jupyter_output><empty_output><jupyter_text>Пример забора данных с сайтов<jupyter_code>import pymysql

connection
pd.read_sql('select * from db.table;', connection)
pd.read_html('http://www.cbr.ru')[0]
page_url = 'https://www.finanz.ru/valyuty/usd-rub'

# Импортируем нужную нам страницу в df
# attrs = {'class': 'news_table'} ---> указываем какой именно блок нам нужен
# encoding='utf-8' ---> указываем кодировку страниц для корректного отображения кириллицы
df = pd.read_html(page_url, attrs = {'class': 'news_table'}, encoding='utf-8')
df[:2]
df[:2]<jupyter_output><empty_output><jupyter_text>Импорт данных из файла<jupyter_code>csv - comma 
data = pd.read_csv('power.csv')
data.head()
data.head(30)
data.tail(10)
type(data)
data.
# если надо указать свои заголовки и разделитель
# data = pd.read_csv('power.csv', names = ['страна', 'год', 'количество', 'категория'], sep = '\t', header=0)
# data.head()
?pd.read_csv
# количество строк в датафрейме

len(data)
# или так

data.shape<jupyter_output><empty_output><jupyter_text>Простые вычисления для нового столбца<jupyter_code>data['year_plus_one'] = data['year'] + 1
data.head()<jupyter_output><empty_output><jupyter_text>Основные сведения о датафрейме<jupyter_code>data.info()
2**64
None
# немного статистики

data.describe()<jupyter_output><empty_output><jupyter_text>Отдельный столбец (тип Series)<jupyter_code>data['year plus one'].head()
# или так

data.year.head()
type(data['year'])
data.head()
# уникальные значения в столбце

data['category'].unique()
set([1, 1, 1, 2])
len(data['category'].unique())
data['category'].nunique()
data['category'].head()
# распределение количества строк по значениям столбца

data['category'].value_counts().head(10)
data['category'].value_counts(normalize=True).head()<jupyter_output><empty_output><jupyter_text>Фильтры<jupyter_code>data = pd.read_csv('power.csv')
data.head()
# выбрать несколько столбцов

country_stats = data.filter(items = ['country', 'quantity'])
country_stats.head()
data['country']
# или так

data[['country', 'quantity']].head()<jupyter_output><empty_output><jupyter_text>Отфильтруем строки с потреблением выше среднего<jupyter_code>average_level = data['quantity'].mean()
average_level
'quantity > {}'.format(average_level)
f'quantity > {average_level}'
# строки с потреблением больше среднего

average_level = data['quantity'].mean()
country_stats.query('quantity > {}'.format(average_level)).head()
if data.quantity > average_level:
# самый популярный способ

data[ data.quantity > average_level ].head()<jupyter_output><empty_output><jupyter_text>Как определить используемый вариант названия страны?<jupyter_code>data['country'].unique()
if 'rus' in 'Russia Federation':
# найдем как называется Россия и Беларусь в этом датафрейме
# фильтр на подстроку - смотрим все страны, содержащие в названии 'us'

data[ data['country'].str.contains('us', case=False) ]['country'].unique()
# фильтр на несколько условий сразу
# | - условие ИЛИ
# & AND
# () | (() | () & ())
filtered_countries = data[ (data['country']=='Russian Federation') | (data['country']=='Belarus') ]

filtered_countries.head()
filtered_countries['country'].unique()
# фильтры на номер строки

data.loc[1000:1005]<jupyter_output><empty_output><jupyter_text>Сортировка<jupyter_code># Сортировка по столбцу

data.sort_values(by='quantity').head()
# сортировка по убыванию

data.sort_values('quantity', ascending=False).head()
# сортировка по нескольким столбцам

data.sort_values(by=['year', 'country', 'quantity'], ascending=[False, True, False]).head(50)<jupyter_output><empty_output><jupyter_text>Параметр inplace<jupyter_code>data.head()
data = data.sort_values(['country', 'year'], ascending=[False, True])
def calculation(data, inplace=True):
    data.sort_values(['country', 'year'], ascending=[False, True], inplace=inplace)
data.sort_values(['country', 'year'], ascending=[False, True], inplace=True)
data = data.sort_values(by=['country', 'year', 'quantity'], ascending=[True, True, False])

# чтобы сократить это выражение используем inplace:
data.sort_values(by=['country', 'year', 'quantity'], ascending=[True, True, False], inplace=True)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.16072692943120132, 'fraction_numerical': 0.007080481472740146, 'mean_word_length': 8.113978494623655, 'pattern_counts': {'":': 0, '<': 45, '<?xml version=': 0, '>': 52, 'https://': 1, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '555768', 'license': 'BSD-4-Clause-UC', 'n_tokens_mistral': 1660, 'n_tokens_neox': 1721, 'n_words': 288, 'path': 'Python_10_pandas_basics.ipynb', 'repo_name': 'mila-khripunova/PYDA-15_WA-50_M', 'size': '4237'}