передать кадр данных pandas со столбцами multi_index в R - PullRequest
1 голос
/ 08 мая 2020

Как передать в R фрейм данных pandas с мультииндексными столбцами? предпочтительно, используя файл CSV?

import pandas as pd

df = pd.DataFrame({'foo':[1,1,2], 'baz':['a', 'c', 'b'], 'bar':[0.2, 0.6, 0.9], 'x':[4, 0.6, 0.9]})
display(df)
df = df.groupby(['foo', 'baz']).describe()
display(df)

приводит к: enter image description here

df.to_csv("test.csv") создает следующий файл CSV:

,,bar,bar,bar,bar,bar,bar,bar,bar,x,x,x,x,x,x,x,x
,,count,mean,std,min,25%,50%,75%,max,count,mean,std,min,25%,50%,75%,max
foo,baz,,,,,,,,,,,,,,,,
1,a,1.0,0.2,,0.2,0.2,0.2,0.2,0.2,1.0,4.0,,4.0,4.0,4.0,4.0,4.0
1,c,1.0,0.6,,0.6,0.6,0.6,0.6,0.6,1.0,0.6,,0.6,0.6,0.6,0.6,0.6
2,b,1.0,0.9,,0.9,0.9,0.9,0.9,0.9,1.0,0.9,,0.9,0.9,0.9,0.9,0.9

Как мне сохранить эту иерархическую структуру? Или, если это невозможно, по крайней мере, R автоматически объединит имена, чтобы сохранить информацию из заголовка

Ответы [ 2 ]

1 голос
/ 08 мая 2020
  • Объедините многоуровневое имя, затем сохраните в CSV.
# as_index=False
df = df.groupby(['foo', 'baz'], as_index=False).describe()

# combine the column level names with a .
df.columns = df.columns.map('.'.join)

 foo.count  foo.mean  foo.std  foo.min  foo.25%  foo.50%  foo.75%  foo.max  bar.count  bar.mean  bar.std  bar.min  bar.25%  bar.50%  bar.75%  bar.max  x.count  x.mean  x.std  x.min  x.25%  x.50%  x.75%  x.max
       1.0       1.0      NaN      1.0      1.0      1.0      1.0      1.0        1.0       0.2      NaN      0.2      0.2      0.2      0.2      0.2      1.0     4.0    NaN    4.0    4.0    4.0    4.0    4.0
       1.0       1.0      NaN      1.0      1.0      1.0      1.0      1.0        1.0       0.6      NaN      0.6      0.6      0.6      0.6      0.6      1.0     0.6    NaN    0.6    0.6    0.6    0.6    0.6
       1.0       2.0      NaN      2.0      2.0      2.0      2.0      2.0        1.0       0.9      NaN      0.9      0.9      0.9      0.9      0.9      1.0     0.9    NaN    0.9    0.9    0.9    0.9    0.9

# save to csv
df.to_csv('test.csv', index=False)
0 голосов
/ 09 мая 2020

Вот один из способов передачи кадра данных Python для использования в контексте R напрямую, без прохождения промежуточного шага CSV: используйте R Markdown и создайте фрагменты кода как в Python, так и в R, используя reticulate пакет для перемещения между ними. Этот документ R Markdown отображает HTML ниже. Используйте py$ для вызова Python объектов в блоках R после их создания.

---
title: "Pandas Exchange"
date: "5/8/2020"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(reticulate)
library(magrittr)
library(knitr)
```

## Using a Pandas Data Frame in R

First load your Pandas data frame into variable `df`:

```{python}
import pandas as pd

df = pd.DataFrame({'foo':[1,1,2], 'baz':['a', 'c', 'b'], 'bar':[0.2, 0.6, 0.9], 'x':[4, 0.6, 0.9]})
df = df.groupby(['foo', 'baz']).describe()
print(df)
```
Then use it from within an R chunk:

```{r}
py$df %>% kable()
```

Когда вы визуализируете это в R Studio, вы получаете:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...