Получение информации для анализа в Pandas
В этой статье рассмотрены различные способы загрузки данных в библиотеку Pandas. Каждый метод сопровождается примерами кода и описанием возможных проблем.
Основное эффективное решение: чтение CSV файлов
Как загрузить табличные данные из текстового файла с разделителями?
Наиболее распространенный способ - использование функции pd.read_csv. Она читает файл и возвращает DataFrame.
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
обработка больших данных python (обработка больших данных в python)
Пояснение: read_csv автоматически определяет разделитель (по умолчанию запятая), первую строку считает заголовком. Если файл не имеет заголовка, используется параметр header=None.
Типичные ошибки:
- Файл не найден - проверьте путь.
- Неправильная кодировка - укажите encoding='utf-8' или другую.
- Проблемы с разделителями - используйте параметр sep=';'.
Как прочитать данные из Excel файла?
Для файлов Excel (.xlsx) используется pd.read_excel. Требуется установка библиотеки openpyxl или xlrd.
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df.head())
очистка данных python (очистка данных в python)
Параметр sheet_name указывает лист. Можно передать номер или список для загрузки нескольких листов.
Проблемы:
- Отсутствует модуль openpyxl - установите через pip install openpyxl.
- Формат .xls поддерживается только xlrd версии <=1.2.0.
Как получить данные из SQL базы данных?
Для выполнения SQL-запросов используется pd.read_sql в паре с соединением через sqlalchemy или напрямую через драйвер БД.
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df = pd.read_sql('SELECT * FROM users', engine)
print(df.head())
Python подготовка данных (подготовка данных в python)
Пояснение: create_engine создает движок для подключения. SQL-запрос передается строкой. Для параметризации используется params.
Распространенные ошибки:
- Неверная строка подключения - проверьте формат (например, postgresql://user:pass@localhost/db).
- Отсутствие драйвера (psycopg2 для PostgreSQL).
Как загрузить данные из JSON файла?
Функция pd.read_json преобразует JSON-файл в DataFrame. Поддерживаются различные ориентации (records, index, columns и т.д.).
df = pd.read_json('data.json', orient='records')
print(df.head())
Python работа с большими данными (работа с большими данными в python)
По умолчанию orient='columns'. Если структура JSON отличается, нужно указать подходящую ориентацию.
Сложности: вложенные JSON могут требовать предварительной нормализации с помощью pd.json_normalize.
Как получить данные из HTML таблиц на веб-странице?
Функция pd.read_html находит все таблицы на странице (ищет теги <table>) и возвращает список DataFrame.
dfs = pd.read_html('https://example.com/page')
df = dfs[0] # первая таблица
print(df.head())
генерация данных python (генерация данных в python)
Требуются библиотеки lxml или html5lib. Обратите внимание, что парсинг может быть медленным.
Проблемы: если таблица динамическая (JavaScript), read_html не сработает - потребуется Selenium.
Как получить данные через HTTP API (REST)?
Сначала выполняется запрос с помощью библиотеки requests, затем ответ преобразуется в DataFrame.
import requests
response = requests.get('https://api.example.com/data')
data = response.json() # ожидается список словарей
df = pd.DataFrame(data)
print(df.head())
Пояснение: requests.get возвращает объект Response. Метод .json() десериализует JSON. Если структура сложная, используют pd.json_normalize.
Типичные ошибки:
- Отсутствие доступа к сети или неверный URL.
- API требует токен или ключ - передавайте в headers.
- Формат ответа отличается от ожидаемого.
Расширенные примеры работы с загрузкой данных
Ниже приведены продвинутые сценарии, которые часто встречаются на практике.
Чтение CSV с нестандартными параметрами
import pandas as pd
df = pd.read_csv(
'data.tsv',
sep='\t', # табуляция как разделитель
encoding='cp1251', # кодировка Windows
header=0, # первая строка - заголовок
names=['col1','col2','col3'], # переопределить заголовки
dtype={'col1': str, 'col2': float}, # явный тип столбцов
parse_dates=['date_column'], # преобразовать в datetime
na_values=['NA', 'N/A', 'None'] # значения, которые считать пропущенными
)
print(df.info())
RangeIndex: 1000 entries, 0 to 999 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 col1 1000 non-null object 1 col2 980 non-null float64 2 date_column 1000 non-null datetime64[ns]
Этот пример демонстрирует тонкую настройку: указание разделителя, кодировки, типов данных и обработки пропусков.
Чтение больших CSV файлов по частям (chunksize)
chunk_iter = pd.read_csv('huge_file.csv', chunksize=10000)
for chunk in chunk_iter:
# обработка каждой части
print(chunk.shape)
Использование chunksize возвращает итератор, что позволяет обрабатывать файл, не загружая его полностью в память.
Загрузка данных из буфера (StringIO)
from io import StringIO
data = """name,age,city
Alice,30,New York
Bob,25,Boston
"""
df = pd.read_csv(StringIO(data))
print(df)
name age city
0 Alice 30 New York
1 Bob 25 Boston
Метод удобен для тестирования или когда данные уже находятся в строковой переменной.
Чтение нескольких файлов и объединение
import glob
all_files = glob.glob('data/*.csv')
df_list = [pd.read_csv(f) for f in all_files]
df_all = pd.concat(df_list, ignore_index=True)
print(df_all.shape)
Применяется, когда данные распределены по множеству однотипных файлов.
Загрузка данных из Google Sheets
# Необходимо опубликовать таблицу и получить CSV ссылку
url = 'https://docs.google.com/spreadsheets/d/.../export?format=csv'
df = pd.read_csv(url)
print(df.head())
Этот способ позволяет получать данные из облачных таблиц без использования API.
Чтение данных из ZIP-архива
import zipfile
with zipfile.ZipFile('data.zip') as z:
with z.open('file.csv') as f:
df = pd.read_csv(f)
print(df.head())
Позволяет читать CSV напрямую из архива без предварительного извлечения.
Использование read_sql с параметрами
engine = create_engine('postgresql://user:pass@localhost/db')
params = {'region': 'East'}
df = pd.read_sql('SELECT * FROM sales WHERE region = :region', engine, params=params)
print(df.head())
Параметризация предотвращает SQL-инъекции и улучшает читаемость.
Нормализация вложенного JSON
import pandas as pd
data = [
{'id': 1, 'info': {'name': 'Alice', 'age': 30}},
{'id': 2, 'info': {'name': 'Bob', 'age': 25}}
]
df = pd.json_normalize(data, sep='_')
print(df)
id info_name info_age 0 1 Alice 30 1 2 Bob 25
Функция json_normalize разворачивает вложенные структуры в плоский DataFrame.