Spec-Zone.ru › pandas 0.25

Сравнение с 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;

Структуры данных

Перевод общей терминологии

pandasSAS
DataFrameнабор данных
столбецпеременная
строканаблюдение
groupbyBY-группа
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API