Skip to content
andyceo edited this page Nov 21, 2023 · 5 revisions

Pandas

Pandas - наиболее распространённая библиотека для обработки и очистки данных.

Официальная документация Pandas

Основные понятия

Pandas предоставляет два объекта: Series и Dataframe.

Series - больше всего похож на обычный словарь в Python.

labels = ["label 1", "label 2", "label 3"]
list_values = [1,2,3]
arr_values = np.array(list_values)
pd.Series(list_values, index=labels)

Dataframe - это двумерный Series с поименованными строками и колонками

list_columns = ["col_1", "col_2", "col_3"]
list_index = ["row_1", "row_2", "row_3"]
arr_bis = np.array([[1,2,3], [7,1,6], [9,6,9]])
df = pd.DataFrame(arr_bis, index=list_index, columns=list_columns)
df.values  # return Numpy matrix (2D-array)

Очистка и выбор данных

import pandas as pd
assets = pd.read_csv("/tmp/assets.csv")  # simple create DataFrame from csv file
assets = pd.read_csv("/tmp/assets.csv", parse_dates=True, index_col="time")
# parse_dates - парсит строки дат в datetime
# index_col - строит индекс (какую колонку использовать для задания меток строкам)

# сортировка по индексу
assets = assets.sort_index(ascending=True)

# выбор только некоторых колонок
assets = assets[["Close DJI30", "Close CAC40", "Close SP500"]]

# удаляем все строки, содержащие хотя бы одно пустое значение
assets = assets.dropna()

# перестраиваем индекс
assets = assets.reset_index()

# rolling: создаем новую колонку со скользящей средней
assets["SMA 15"] = assets[["Close SP500"]].rolling(15).mean()

# shift: возвращает колонку со взятым из прошлого значением
assets["Close SP500"].shift(1)

# группировка
arr = [[1,11], [1,10], [3, 15], [3, 15], [3, 15]]
df = pd.DataFrame(arr, columns=["num", "value"])
df.groupby(by="num").mean()
df.groupby(by="num").sum()
df.groupby(by="num").std()

Выбор строк и колонок

Функции DataFrame.iloc и DataFrame.loc.

assets.iloc[0:1500, 0:10]
assets.loc["2014":"2015"]
assets.loc[assets["Close DJI30"] > 15000]

Соединение (конкатенация) датафреймов, объединение и дополнение датафреймов

df1 = assets.iloc[:, :3]
df2 = assets.iloc[:, 3:]
pd.concat((df1, df2), axis=1)

df1 = assets.iloc[1500:, :]
df2 = assets.iloc[:1500, :]
pd.concat((df1, df2), axis=0)

Метода append у Dataframe нет! Его убрали, т.к. сложность метода растет квадратично от кол-ва строк, и его часто использовали в циклах. См. DataFrame object has no attribute append

Полезные сниппеты

Создание датафрейма из csv-файла и его очистка:

assets = pd.read_csv("/tmp/assets.csv", parse_dates=True, index_col="time")
assets = assets.dropna()
assets = assets.sort_index(ascending=True)

Импорт данных в DataFrame и отображение загруженных данных

Импортируем биржевые данные из файла ../data/facebook.csv, и указываем номер колонки, по которой будет строиться индекс (по умолчанию он будет строиться на колонках 0,1,2,3..):

import pandas as pd
fb = pd.read_csv('../data/facebook.csv', index_col=0)

Убедимся, что данные загружены, показав нулевой столбец нулевой строки:

print(fb.iloc[0, 0])

Начертим график цены закрытия:

import matplotlib.pyplot as plt
plt.figure(figsize=(10, 8))
fb['Close'].loc['2015-01-01':'2015-12-31'].plot(label='Close')
plt.legend()
plt.show()

Сценарии использования

  • взять последнее значение колонки: last_value = df['City'].iat[-1]

Sidebar is under construction

Clone this wiki locally