Сравнение с SAS
Для потенциальных пользователей, переходящих с SAS, эта страница демонстрирует, как различные операции SAS выполняются в pandas.
Если вы новичок в pandas, вы можете сначала ознакомиться с 10 минут с pandas, чтобы ознакомиться с библиотекой.
Как обычно, мы импортируем pandas и NumPy следующим образом:
import pandas as pd import numpy as np
Примечание
В этом учебном пособии pandas DataFrame будет отображаться вызовом df.head(), который отображает первые N (по умолчанию 5) строк DataFrame. Это часто используется в интерактивной работе (например, в Jupyter notebook или терминале) — эквивалент в SAS будет:
proc print data=mydata(obs=5); run;
Структуры данных
Перевод общей терминологии
| pandas | SAS |
|---|---|
DataFrame | набор данных |
| столбец | переменная |
| строка | наблюдение |
| groupby | BY-группа |
NaN | . |
DataFrame / Series
DataFrame в pandas аналогичен набору данных SAS — двумерному источнику данных с именованными столбцами, которые могут иметь разные типы. Как будет показано в этом документе, практически любая операция, которая может быть применена к набору данных с помощью шага SAS DATA, также может быть выполнена в pandas.
Series — это структура данных, представляющая один столбец DataFrame. SAS не имеет отдельной структуры данных для одного столбца, но в целом работа с Series аналогична ссылке на столбец в шаге DATA.
Index
Каждый DataFrame и Series имеет Index — это метки строк данных. SAS не имеет точно аналогичной концепции. Строки набора данных по сути не имеют меток, за исключением неявного целочисленного индекса, к которому можно получить доступ во время шага DATA (_N_).
В pandas, если индекс не указан, по умолчанию используется целочисленный индекс (первая строка = 0, вторая строка = 1 и т. д.). Хотя использование помеченных Index или MultiIndex может обеспечить сложные анализы и в конечном итоге является важной частью понимания pandas, для этого сравнения мы фактически проигнорируем Index и просто будем рассматривать DataFrame как набор столбцов. Подробнее о том, как эффективно использовать Index, см. в документации индексации.
Ввод/вывод данных
Создание DataFrame из значений
Набор данных SAS может быть создан из заданных значений путем размещения данных после оператора datalines и указания имен столбцов.
data mydata; input var1 var2; datalines; 1 2 3 4 ; run;
DataFrame pandas может быть создан многими способами, но для небольшого числа значений удобно указать его как словарь Python, где ключи — имена столбцов, а значения — данные.
import pandas as pd
data = {'col1': [1, 3], 'col2': [2, 4]}
df = pd.DataFrame(data)
Чтение внешних данных
Как и SAS, pandas предоставляет утилиты для чтения данных из многих форматов. tips набор данных, содержащийся в тестах pandas (csv), будет использоваться во многих последующих примерах.
SAS предоставляет PROC IMPORT для чтения данных csv в набор данных.
proc import datafile="path/to/file.csv" dbms=csv out=mydata replace; run;
Метод pandas — read_csv(), который работает аналогично.
import pandas as pd
df = pd.read_csv("path/to/file.csv")
Как и PROC IMPORT, read_csv может принимать ряд параметров для указания способа парсинга данных. Например, если данные были разделены табуляцией и не имели имен столбцов, команда pandas будет:
import pandas as pd
df = pd.read_csv("path/to/file.txt", sep="\t", header=None)
Помимо текстовых/csv-форматов, pandas поддерживает множество других форматов данных, таких как Excel, HDF5 и базы данных SQL. Все они считываются с помощью функции pd.read_*. Подробнее см. в документации по вводу/выводу.
Экспорт данных
Обратная операция к PROC IMPORT в SAS — PROC EXPORT
proc export data=mydata outfile="path/to/file.csv" dbms=csv; run;
Аналогично в pandas, противоположность read_csv — to_csv(), и другие форматы данных следуют аналогичному API.
import pandas as pd
df.to_csv("path/to/file.csv")
Операции с данными
Операции над столбцами
В шаге DATA произвольные математические выражения могут использоваться для новых или существующих столбцов.
data mydata; set mydata; new_col = var1 + var2; run;
pandas предоставляет аналогичные векторизованные операции, указав отдельные Series в DataFrame. Новые столбцы могут быть назначены аналогичным образом.
import pandas as pd df['new_col'] = df['col1'] + df['col2']
Фильтрация
Фильтрация в SAS выполняется с помощью оператора if или where по одному или нескольким столбцам.
data filtered_data; set mydata; if var1 > 5; run;
DataFrame можно фильтровать различными способами; наиболее интуитивный из которых — использование булевого индексирования
import pandas as pd df[df['col1'] > 5]
Логика «если-то»
В SAS для создания новых столбцов используется логика «если-то».
data mydata; set mydata; if var1 > 5 then new_col = 1 else new_col = 0; run;
Такую же операцию в pandas можно выполнить с помощью метода where из numpy.
import pandas as pd df['new_col'] = df.apply(lambda row: 1 if row['col1'] > 5 else 0, axis=1)
Функциональность дат
SAS предоставляет различные функции для выполнения операций со столбцами дат/временных меток.
data mydata;
set mydata;
new_date = intnx('month', mydate, 3);
run;
Эквивалентные операции pandas показаны ниже. Кроме этих функций, pandas поддерживает другие функции временных рядов, отсутствующие в Base SAS (например, ресемплинг и пользовательские смещения) — см. документацию по временным рядам для получения дополнительной информации.
import pandas as pd
df['new_date'] = df['mydate'].dt.to_period('M').dt.to_timestamp()
Выбор столбцов
SAS предоставляет ключевые слова в шаге DATA для выбора, удаления и переименования столбцов.
data mydata; set mydata; drop var1; rename var2 as new_var; run;
Те же операции выражены в pandas ниже.
import pandas as pd
df = df.drop('var1', axis=1)
df = df.rename(columns={'var2': 'new_var'})
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.25.0/getting_started/comparison/comparison_with_sas.html