Создание DataFrame из строки в Pandas: пошаговый гайд
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если необходимо преобразовать многострочный текст в DataFrame, можно воспользоваться встроенной функцией pd.read_csv(StringIO(data))
:
import pandas as pd
from io import StringIO
data = "A,B,C\n1,2,3\n4,5,6"
df = pd.read_csv(StringIO(data))
print(df)
Результатом будет DataFrame вида:
A B C
0 1 2 3
1 4 5 6
Если данные разделены нестандартным символом, возможно задать свой разделитель в функции pd.read_csv()
:
df_semicolon = pd.read_csv(StringIO(data), sep=';')
Работаем с StringIO и read_csv
Для обработки строковых данных как с файловыми рекомендуется использовать io.StringIO
. Этот подход позволит pd.read_csv()
без особых усилий считывать данные в DataFrame.
Работа с разделителями
Ваши данные могут быть разделены различными символами: запятаями, точками с запятой или, допустим, тильдами. Если разделитель — точка с запятой, рекомендуется передать в функцию параметр sep=';'
:
string_data = "Column1;Column2;Column3\n7;8;9\n10;11;12"
df_semicolon = pd.read_csv(StringIO(string_data), sep=';')
print(df_semicolon)
Внимание к деталям гарантирует правильность данных и их корректную загрузку в DataFrame.
Рассматриваем нерегулярные форматы данных
При необходимости настройки разделителя, окруженного пробелами, можно использовать регулярные выражения:
string_data = "Column1 ; Column2 ; Column3\n7 ; 8 ; 9\n10 ; 11 ; 12"
df_semicolon = pd.read_csv(StringIO(string_data), sep=r'\s*;\s*')
print(df_semicolon)
Перенос данных в DataFrame
Если данные разделены вертикальной чертой, всё равно следует использовать pd.read_csv
, указав важный разделитель:
pipe_data = "A|B|C\n1|2|3\n4|5|6"
df_pipe = pd.read_csv(StringIO(pipe_data), sep='|')
print(df_pipe)
Визуализация
Можно преобразовать следующую строку в наглядный DataFrame:
Комплексная строка: "Томат=3.42,Огурец=1.25,Кукуруза=0.99"
Для этого будет нужно выполнить два промежуточных шага:
Шаг 1: Разделяем элементы → ['Томат=3.42', 'Огурец=1.25', 'Кукуруза=0.99']
Шаг 2: Разделяем название и цену → [('Томат', '3.42'), ('Огурец', '1.25'), ('Кукуруза', '0.99')]
И, в конечном счете, получим DataFrame с ценами на продукты:
| Продукт | Цена |
| -------- | ---- |
| Томат | 3.42 |
| Огурец | 1.25 |
| Кукуруза | 0.99 |
Так, пошагово, мы можем привести данные из хаоса к структурному порядку.
Дополнительные полезные приемы
Команда для загрузки данных из буфера обмена в DataFrame существует:
- Применяйте
pd.read_clipboard(sep=';')
для тестов, но на него не стоит полагаться в реальной работе.
Для пользующихся PyCharm есть полезный плагин:
- "Pipe Table Formatter" улучшит визуализацию данных, что упрощает их подготовку для загрузки в DataFrame.
Помните о важности качества данных:
- Перед тем как создавать DataFrame, выполняйте тщательную проверку и очистку данных.
Zаключительная ремарка:
pd.read_csv()
не только удобен в использовании, но и способен определить названия столбцов и сохранить типы данных.
Полезные материалы
- pandas.DataFrame — документация pandas 2.2.0 — все, что нужно знать о создании и управлении DataFrames в Pandas.
- Инструменты ввода/вывода (текст, CSV, HDF5, ...) — документация pandas 2.2.0 — функции ввода/вывода в Pandas.
- pandas.read_csv — документация pandas 2.2.0 — подробная информация о преобразовании CSV-строки в DataFrame.
- io — основные инструменты для работы с потоками — документация Python 3.12.1 — руководство по применению StringIO для создания файлоподобных объектов.
- python – Создание DataFrame в Pandas из строки – Stack Overflow — коллекция примеров и обсуждений на тему создания DataFrame из строки.
- csv — чтение и запись файлов CSV — документация Python 3.12.1 — обзор модуля csv в Python.
- Работа с текстовыми данными — документация pandas 2.2.0 — руководство по работе с текстовыми данными в Pandas.