Наборы данных в среде Python: как получить таблицы для анализа через Pandas

Раздел: Анализ данных -> Pandas

Основные способы загрузки и создания наборов данных в Python для Pandas

Как загрузить табличные данные из внешнего файла с помощью Pandas?

Самый распространенный и эффективный способ получить набор данных для анализа - прочитать файл формата CSV, Excel или TSV с помощью встроенных функций библиотеки Pandas. Метод pd.read_csv() позволяет загрузить данные из текстового файла с разделителями, автоматически распознать заголовки столбцов и создать объект DataFrame.

import pandas as pd

# Чтение CSV-файла
url = 'https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv'
df = pd.read_csv(url, sep=',', header=0)
print(df.head())

обработка больших данных python (обработка больших данных в python)

   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

очистка данных python (очистка данных в python)

В примере указан параметр sep (разделитель) и header (строка с названиями столбцов). Pandas автоматически определяет тип данных каждого столбца, но при необходимости можно задать типы вручную через аргумент dtype.

Типичные ошибки:

  • Неверный разделитель - файл может использовать точку с запятой или табуляцию. Решение: указать sep='\\t' или sep=';'.
  • Проблемы с кодировкой - кириллица отображается кракозябрами. Добавьте encoding='utf-8' или encoding='cp1251'.
  • Пропущенные значения (NaN) - используйте na_values для указания меток пропусков.

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

Многие библиотеки поставляются с готовыми наборами данных, которые можно загрузить одной строкой кода. Например, seaborn.load_dataset(), sklearn.datasets, statsmodels.api.datasets. Это удобно для обучения и быстрых экспериментов.

import seaborn as sns

# Загрузка датасета 'tips' (чаевые)
df_tips = sns.load_dataset('tips')
print(df_tips.head())

Python подготовка данных (подготовка данных в python)

   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

Python работа с большими данными (работа с большими данными в python)

Также можно загрузить популярные датасеты из sklearn (например, iris, boston) в виде словаря с признаками и целевой переменной.

from sklearn.datasets import load_iris
import pandas as pd

iris_data = load_iris()
df_iris = pd.DataFrame(data=iris_data.data, columns=iris_data.feature_names)
df_iris['target'] = iris_data.target
print(df_iris.head())

генерация данных python (генерация данных в python)

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
0                5.1               3.5                1.4               0.2       0
1                4.9               3.0                1.4               0.2       0
2                4.7               3.2                1.3               0.2       0
3                4.6               3.1                1.5               0.2       0
4                5.0               3.6                1.4               0.2       0

Python код символа (код символа в python)

Проблемы: некоторые датасеты могут отсутствовать в установленной версии библиотеки (например, в новых версиях seaborn удалены устаревшие наборы). Решение: проверять документацию или использовать альтернативные источники.

Как создать собственный набор данных из Python-структур?

Когда внешние данные недоступны, можно сформировать DataFrame из словаря, списка списков или массива NumPy. Это полезно для тестирования функций или прототипирования.

# Из словаря (ключи - названия столбцов)
data_dict = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Salary': [50000, 60000, 70000]
}
df = pd.DataFrame(data_dict)
print(df)

код из файла python (код из файла python)

      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000

обработка данных на python (обработка данных на python)

# Из списка списков с указанием заголовков
data_list = [[1, 'A', 3.5], [2, 'B', 4.8], [3, 'C', 6.2]]
df2 = pd.DataFrame(data_list, columns=['ID', 'Group', 'Value'])
print(df2)

обработка символьных данных python (обработка символьных данных в python)

   ID Group  Value
0   1     A    3.5
1   2     B    4.8
2   3     C    6.2

Python преобразование в строку (преобразование в строку в python)

Ошибка: несовпадение длины списков в словаре. Все значения-списки должны быть одинаковой длины. Если нужно создать столбец с отсутствующими данными, используйте pd.NA.

Как сгенерировать случайный набор данных для анализа?

Для имитации данных (например, симуляция A/B теста или временного ряда) применяется модуль numpy.random в сочетании с Pandas. Это позволяет контролировать распределение и размер выборки.

import numpy as np

np.random.seed(42)
# 1000 строк, 3 столбца
n = 1000
df_random = pd.DataFrame({
    'feature1': np.random.normal(0, 1, n),
    'feature2': np.random.uniform(0, 10, n),
    'category': np.random.choice(['A', 'B', 'C'], n),
    'target': np.random.binomial(1, 0.3, n)
})
print(df_random.head())

Python как проверить строку (проверка строки в python)

   feature1  feature2 category  target
0  0.496714  2.747562        C       0
1 -0.138264  1.300373        B       0
2  0.647689  8.163868        A       0
3  1.523030  4.910383        A       1
4 -0.234153  5.070089        A       0

как работать с данными в python (работа с данными в python)

Внимание: при многократном запуске кода без фиксации seed наборы будут разными, что затруднит воспроизводимость. Используйте np.random.seed().

Как прочитать таблицы из Excel или SQL базы данных?

Для работы с файлами Excel предназначена функция pd.read_excel(), которая может считывать отдельные листы. Для данных из SQL используется pd.read_sql() в паре с SQLAlchemy.

# Чтение Excel-файла (лист по имени или индексу)
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1', engine='openpyxl')

# Чтение из SQLite (пример)
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df_sql = pd.read_sql('SELECT * FROM sales', engine, parse_dates=['date'])
print(df_sql.head())

Параметры parse_dates помогает автоматически преобразовать строковые даты в datetime.

Частая проблема: отсутствие драйвера для Excel (например, когда не установлен openpyxl). Установите нужный пакет: pip install openpyxl.

- столбец dataframe python (работа со столбцом dataframe в pandas)
- Python get url (получение url в python)
- Get data python (получение данных в python)

Расширенные примеры работы с наборами данных в Pandas

Пример 1: Чтение большого CSV частями (chunksize)

Когда файл не помещается в оперативную память, можно загружать данные порциями.

Пример
import pandas as pd

chunk_iter = pd.read_csv('huge_file.csv', chunksize=10000)
first_chunk = next(chunk_iter)
print('Размер одного чанка:', first_chunk.shape)
# Обработка каждой части в цикле
for chunk in chunk_iter:
    # Выполнение операций с chunk
    pass
Размер одного чанка: (10000, 12)

Пример 2: Настройка типов и пропусков при загрузке

Укажите dtype для столбцов, чтобы сэкономить память, и na_values для унификации пропусков.

Пример
import pandas as pd

df = pd.read_csv('data.csv',
                 dtype={'user_id': 'int32', 'age': 'int8'},
                 na_values=['NA', 'N/A', '-', ''],
                 usecols=['user_id', 'age', 'gender'])
print(df.info())

RangeIndex: 500 entries, 0 to 499
Data columns (total 3 columns):
 #   Column   Non-Null Count  Dtype
---  ------   --------------  -----
 0   user_id  500 non-null    int32
 1   age      487 non-null    int8
 2   gender   500 non-null    object
dtypes: int32(1), int8(1), object(1)
memory usage: 2.8+ KB

Пример 3: Слияние нескольких датасетов (merge)

Часто данные распределены по разным таблицам. Их объединяют по ключам.

Пример
import pandas as pd

df_orders = pd.DataFrame({
    'order_id': [1,2,3],
    'customer_id': [101,102,101],
    'amount': [250, 180, 300]
})
df_customers = pd.DataFrame({
    'customer_id': [101,102],
    'name': ['Alice', 'Bob']
})
# Внутреннее объединение
df_merged = pd.merge(df_orders, df_customers, on='customer_id', how='inner')
print(df_merged)
   order_id  customer_id  amount   name
0         1          101     250  Alice
1         3          101     300  Alice
2         2          102     180    Bob

Пример 4: Конкатенация однотипных DataFrame

Когда нужно объединить несколько таблиц с одинаковыми столбцами по вертикали.

Пример
df1 = pd.DataFrame({'A': [1,2], 'B': [3,4]})
df2 = pd.DataFrame({'A': [5,6], 'B': [7,8]})
df_concat = pd.concat([df1, df2], ignore_index=True)
print(df_concat)
   A  B
0  1  3
1  2  4
2  5  7
3  6  8

Пример 5: Обработка дат при загрузке временных рядов

Параметр parse_dates позволяет сразу преобразовать колонку с датами в datetime.

Пример
import pandas as pd

# Имитация строки с датами
data = """date,value
2023-01-01,10
2023-01-02,20
invalid_date,30
"""
with open('temp.csv', 'w') as f:
    f.write(data)

df = pd.read_csv('temp.csv', parse_dates=['date'], infer_datetime_format=True)
print(df.dtypes)
print(df)
date      datetime64[ns]
value             int64
dtype: object
        date  value
0 2023-01-01     10
1 2023-01-02     20
2        NaT     30

Неверная дата превращается в NaT (Not a Time), что удобно для последующей очистки.

Пример 6: Загрузка данных с пользовательскими разделителями и кавычками

Встречаются нестандартные CSV, например, с разделителем | и кавычками внутри полей.

Пример
import pandas as pd
from io import StringIO

data_pipe = """id|name|comment
1|John|'Hello, world'
2|Jane|"Quote inside"
"""
df_pipe = pd.read_csv(StringIO(data_pipe), sep='|', quotechar="'")
print(df_pipe)
   id  name         comment
0   1  John    Hello, world
1   2  Jane   Quote inside

Совет: если файл содержит символы перевода строки внутри кавычек, используйте параметр engine='python' (медленнее, но надежнее) или установите quoting=csv.QUOTE_ALL.

Наборы данных в Python - comments

En
Python наборы данных (python)