# Pandas: Создание DataFrame из списков (5 способов!)

В этом посте вы узнаете, как создать DataFrame в Pandas из списков, включая работу с одиночными списками, множественными списками и списками списков. Вы также научитесь создавать индексы и задавать имена столбцам. Эти навыки важны при работе с данными из различных источников, таких как веб парсинг.

**Быстрый ответ: используйте класс DataFrame() для создания фреймов данных**

```renpy
import pandas as pd

# Некоторые списки
names = ['Katie', 'Nik', 'James', 'Evan']
ages = [32, 32, 36, 31]
locations = ['London', 'Toronto', 'Atlanta', 'Madrid']

# Список списков
lol = [['Katie', 32, 'London'], ['Nik', 32, 'Toronto'], ['James', 36, 'Atlanta'], ['Evan', 31, 'Madrid']]

# Словарь со списками
dictionary = {'Name': ['Katie', 'Nik', 'James', 'Evan'], 'Age': [32, 32, 36, 31], 'Location': ['London', 'Toronto', 'Atlanta', 'Madrid']}

# Создать DataFrame из одного списка
df = pd.DataFrame(names, columns=['Name'])

# Создать DataFrame из нескольких списков
df = pd.DataFrame(list(zip(names, ages, locations)), columns=['Name', 'Age', 'Location'])

# Создать DataFrame из списка списков
df = pd.DataFrame(lol, columns=['Name', 'Age', 'Location'])

# Создать DataFrame из словаря со списками
df = pd.DataFrame(dictionary)
```

Давайте посмотрим, чему вы научитесь!

Оглавление

* [Объект Pandas dataframe() – краткий обзор](#obekt-pandas-dataframe-kratkii-obzor)
* [Создание Pandas Dataframe из одного списка](#sozdanie-pandas-dataframe-iz-odnogo-spiska)
* [Создание Pandas Dataframe из нескольких списков с помощью Zip](#sozdanie-pandas-dataframe-iz-neskolkikh-spiskov-s-pomoshyu-zip)
* [Создать Pandas Dataframe из списка списков](#sozdat-pandas-dataframe-iz-spiska-spiskov)
* [Указание типов данных с помощью Pandas Dataframes из списков](#ukazanie-tipov-dannykh-s-pomoshyu-pandas-dataframes-iz-spiskov)
* [Создание Pandas Dataframe из словарей со списками](#sozdanie-pandas-dataframe-iz-slovarei-so-spiskami)
* [Заключение](#zaklyuchenie)

### Объект Pandas dataframe() — краткий обзор

Класс DataFrame библиотеки pandas [описывается](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) как двумерная, изменяемая по размеру, потенциально гетерогенная табличная структура данных. Это, на простом языке, означает:

* `two-dimensional` означает, что он содержит строки и столбцы
* `size-mutable` означает, что его размер может измениться
* `potentially heterogeneous` означает, что он может содержать различные типы данных

Вы можете создать пустой DataFrame, просто написав `df = pd.DataFrame()`, что создаст пустой объект DataFrame. Мы уже обсуждали создание [пустого DataFrame ранее](https://datagy.io/empty-pandas-dataframe), а также как добавлять данные в него. Но в этом уроке вы не будете создавать пустой DataFrame.

Вместо этого вы можете использовать параметр `data=`, который является первым аргументом по позиции. Параметр `data=` может содержать `ndarray`, словарь, список или подобный список объект. Из-за множества этих вариантов давайте рассмотрим, как вы можете создать DataFrame из списков Pandas!

### Создание Pandas Dataframe из одного списка

Теперь, когда вы понимаете, что такое класс `DataFrame` в pandas, давайте рассмотрим, как мы можем создать DataFrame из одного списка.

Помните, что параметр `data=` используется для передачи данных. Поскольку параметр `data=` является первым параметром, мы можем просто передать список без необходимости указывать параметр.

Давайте рассмотрим, как передать один список для создания дата

{% tabs %}
{% tab title="Код" %}
```python
import pandas as pd

names = ['Katie', 'Nik', 'James', 'Evan']
df = pd.DataFrame(names)

print(df)
```
{% endtab %}

{% tab title="Результат" %}
```python
       0
0  Katie
1    Nik
2  James
3   Evan
```
{% endtab %}
{% endtabs %}

#### Указание имен столбцов при создании Pandas Dataframe

Мы видим, что Pandas успешно создал наш DataFrame, но наш столбец не имеет имени. Поскольку Pandas фактически не знает, как назвать столбец, нам нужно быть более явными и использовать аргумент `columns=`. Аргумент `columns=` принимает объект, подобный списку, передавая заголовки столбцов в последовательности, в которой и создавались.

Давайте заново создадим наш датафрейм и укажем имя столбца:

{% tabs %}
{% tab title="Код" %}
```python
import pandas as pd

names = ['Katie', 'Nik', 'James', 'Evan']
df = pd.DataFrame(names, columns=['Name'])

print(df)
```
{% endtab %}

{% tab title="Результат" %}
```python
    Name
0  Katie
1    Nik
2  James
3   Evan
```
{% endtab %}
{% endtabs %}

Это теперь возвращает четко обозначенный датафрейм.

В следующем разделе вы узнаете, как создать Pandas DataFrame из нескольких списков, используя функцию `zip()`.

### Создание Pandas Dataframe из нескольких списков с помощью Zip

Предположим, у вас есть более одного списка и вы хотите их передать. К сожалению, простая передача нескольких списков не работает. Из-за этого нам нужно объединить наши списки

Самый простой способ сделать это - использовать встроенную функцию `zip()`. Эта функция принимает два или более итерируемых объекта, таких как списки, и объединяет их в один объект, так же как архиватор.

Давайте посмотрим, как это может работать, создав DataFrame Pandas из двух или более списков:

{% tabs %}
{% tab title="Код" %}
```python
# Создание Pandas DataFrame из нескольких списков с использованием zip()

import pandas as pd

names = ['Katie', 'Nik', 'James', 'Evan']
ages = [32, 32, 36, 31]
locations = ['London', 'Toronto', 'Atlanta', 'Madrid']
zipped = list(zip(names, ages, locations))

df = pd.DataFrame(zipped, columns=['Name', 'Age', 'Location'])

print(df)
```
{% endtab %}

{% tab title="Результат" %}
```python
    Name  Age Location
0  Katie   32   London
1    Nik   32  Toronto
2  James   36  Atlanta
3   Evan   31   Madrid
```
{% endtab %}
{% endtabs %}

Давайте также разберем, что мы здесь

1. Мы создали три списка, содержащие `names`, `ages`, и `locations`, хранящие наши упорядоченные данные.
2. Затем мы создали объект `zip()` в Python, который содержал сочетания имен, возрастов и местоположений. После этого мы применили функцию `list()`, чтобы превратить этот zip-объект в список кортежей.
3. Затем мы передали этот объект `zipped` в наш класс `DataFrame()`, вместе со списком названий столбцов, чтобы создать наш датафрейм.

В следующем разделе вы узнаете, как преобразовать списки списков в датафрей.

### Создать Pandas Dataframe из списка списков

Возможно, вы часто сталкиваетесь со списками списков, например, работая с данными веб-скрапинга. Списки списков - это просто списки, содержащие другие списки. Их также часто называют многомерными списками. Например, список списков может выглядеть так:

```python
data = [['Katie', 32, 'London'], ['Nik', 32, 'Toronto']]
```

Списки списков ведут себя немного по-другому, поскольку вы по сути добавляете данные на уровне строки, а не на уровне столбца, как мы рассматривали до сих пор.

К счастью, Pandas достаточно умен, чтобы самостоятельно разбить каждый список списков на разные столбцы..

Давайте рассмотрим, как можно создать фрейм данных Pandas из списка списков:

{% tabs %}
{% tab title="Код" %}
```python
# Создание Pandas DataFrame из многомерного списка списков

import pandas as pd

data = [['Katie', 32, 'London'], ['Nik', 32, 'Toronto'], ['James', 36, 'Atlanta'], ['Evan', 31, 'Madrid']]
df = pd.DataFrame(data, columns=['Name', 'Age', 'Location'])

print(df)
```
{% endtab %}

{% tab title="Результат" %}
```python
    Name  Age Location
0  Katie   32   London
1    Nik   32  Toronto
2  James   36  Atlanta
3   Evan   31   Madrid
```
{% endtab %}
{% endtabs %}

В следующем разделе вы узнаете, как указать типы данных при создании фреймворка данных Pandas из списка.

### Указание типов данных с помощью Pandas Dataframes из списков

Хотя Pandas хорошо справляется с определением типов данных, указание типов данных может значительно повысить производительность при загрузке и поддержке вашего датафрейма. Поэтому это важный шаг, если вы замечаете некорректную загрузку данных или хотите управлять использованием памяти вашим дата

Let’s take a look at how we can do this in Pandas. We’ll force the age column to be of size `int8`, in order to reduce the memory it uses.

Давайте посмотрим, как мы можем сделать это в Pandas. Мы заставим столбец возраста быть типа `int8`, чтобы уменьшить объем используемой памяти.

{% tabs %}
{% tab title="Код" %}
```python
import pandas as pd

data = [['Katie', 32, 'London'], ['Nik', 32, 'Toronto'], ['James', 36, 'Atlanta'], ['Evan', 31, 'Madrid']]
df = pd.DataFrame(data, columns=['Name', 'Age', 'Location'], dtype='int8')

print(df)
```
{% endtab %}

{% tab title="Результат" %}
```python
    Name  Age Location
0  Katie   32   London
1    Nik   32  Toronto
2  James   36  Atlanta
3   Evan   31   Madrid
```
{% endtab %}
{% endtabs %}

В следующем разделе вы узнаете, как создать датафрейм Pandas из словарей со списками.

### Создание Pandas Dataframe из словарей со списками

В этом заключительном разделе вы узнаете, как работать со словарями, содержащими списки, для создания Pandas DataFrame. Это часто встречается при работе с данными веб-API, когда необходимо преобразовать сложные словари в упрощенные DataFrame

Pandas позволяет передавать словари в параметр `data=`, поэтому практически ничего не нужно делать. Давайте посмотрим, как Pandas справляется с созданием DataFrame

{% tabs %}
{% tab title="Код" %}
```python
import pandas as pd

dictionary = {
    'Name': ['Katie', 'Nik', 'James', 'Evan'], 
    'Age': [32, 32, 36, 31], 
    'Location': ['London', 'Toronto', 'Atlanta', 'Madrid']
    }
df = pd.DataFrame(dictionary)

print(df)
```
{% endtab %}

{% tab title="Результат" %}
```python
    Name  Age Location
0  Katie   32   London
1    Nik   32  Toronto
2  James   36  Atlanta
3   Evan   31   Madrid
```
{% endtab %}
{% endtabs %}

Мы передали словарь, содержащий списки в качестве значений. Pandas даже смогли получить названия столбцов, используя значения `key` каждого элемента в словаре!

### Заключение

В этом посте вы узнали о различных способах создания датафрейма Pandas из списков, включая работу с одним списком, множественными списками с функцией `zip()`, многомерными списками и применением имен столбцов и типов данных для вашего датафрейма.

Чтобы узнать больше об объекте DataFrame в Pandas, обратитесь к [официальной документации здесь](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html).
