Сравнение с R / библиотеками R
Поскольку pandas стремится предоставить много функциональности для обработки и анализа данных, которую люди используют в R, эта страница была создана для более подробного ознакомления с языком программирования R и его многочисленными сторонними библиотеками в связи с pandas. При сравнении с R и библиотеками CRAN мы учитываем следующие моменты:
- Функциональность/гибкость: что можно/нельзя сделать с каждым инструментом
- Производительность: насколько быстро выполняются операции. Желательно наличие точных числовых данных/бенчмарков
- Простота использования: один инструмент проще/сложнее в использовании (это вам придётся судить, учитывая сравнения кода "бок о бок")
Эта страница также служит руководством по переводу для пользователей этих пакетов R.
Для передачи объектов DataFrame из pandas в R можно использовать файлы HDF5, см. Внешняя совместимость для примера.
Быстрый справочник
Мы начнём с быстрого справочника, сопоставляющего некоторые общие операции R, использующие dplyr, с эквивалентами в pandas.
Запросы, фильтрация, выборка
| R | pandas |
|---|---|
dim(df) | df.shape |
head(df) | df.head() |
slice(df, 1:10) | df.iloc[:9] |
filter(df, col1 == 1, col2 == 1) | df.query('col1 == 1 & col2 == 1') |
df[df$col1 == 1 & df$col2 == 1,] | df[(df.col1 == 1) & (df.col2 == 1)] |
select(df, col1, col2) | df[['col1', 'col2']] |
select(df, col1:col3) | df.loc[:, 'col1':'col3'] |
select(df, -(col1:col3)) |
df.drop(cols_to_drop, axis=1) см. [1]
|
distinct(select(df, col1)) | df[['col1']].drop_duplicates() |
distinct(select(df, col1, col2)) | df[['col1', 'col2']].drop_duplicates() |
sample_n(df, 10) | df.sample(n=10) |
sample_frac(df, 0.01) | df.sample(frac=0.01) |
| [1] | Упрощенная запись R для поддиапазона столбцов (select(df, col1:col3)) может быть чисто реализована в pandas, если у вас есть список столбцов, например df[cols[1:3]] или df.drop(cols[1:3]), но выполнение этого по имени столбца немного сложно. |
Сортировка
| R | pandas |
|---|---|
arrange(df, col1, col2) | df.sort_values(['col1', 'col2']) |
arrange(df, desc(col1)) | df.sort_values('col1', ascending=False) |
Преобразование
| R | pandas |
|---|---|
select(df, col_one = col1) | df.rename(columns={'col1': 'col_one'})['col_one'] |
rename(df, col_one = col1) | df.rename(columns={'col1': 'col_one'}) |
mutate(df, c=a-b) | df.assign(c=df.a-df.b) |
Группировка и обобщение
| R | pandas |
|---|---|
summary(df) | df.describe() |
gdf <- group_by(df, col1) | gdf = df.groupby('col1') |
summarise(gdf, avg=mean(col1, na.rm=TRUE)) | df.groupby('col1').agg({'col1': 'mean'}) |
summarise(gdf, total=sum(col1)) | df.groupby('col1').sum() |
Базовый R
Выделение фрагментов с использованием c R
R позволяет легко получить доступ к столбцам data.frame по имени
df <- data.frame(a=rnorm(5), b=rnorm(5), c=rnorm(5), d=rnorm(5), e=rnorm(5))
df[, c("a", "c", "e")]
или по целочисленной позиции
df <- data.frame(matrix(rnorm(1000), ncol=100)) df[, c(1:10, 25:30, 40, 50:100)]
Выбор нескольких столбцов по имени в pandas выполняется просто
In [1]: df = pd.DataFrame(np.random.randn(10, 3), columns=list('abc'))
In [2]: df[['a', 'c']]
Out[2]:
a c
0 0.469112 -1.509059
1 -1.135632 -0.173215
2 0.119209 -0.861849
3 -2.104569 1.071804
4 0.721555 -1.039575
5 0.271860 0.567020
6 0.276232 -0.673690
7 0.113648 0.524988
8 0.404705 -1.715002
9 -1.039268 -1.157892
In [3]: df.loc[:, ['a', 'c']]
© 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.24.2/getting_started/comparison/comparison_with_r.html