logo

Создание DataFrame из строки в Pandas: пошаговый гайд

Быстрый ответ

Если необходимо преобразовать многострочный текст в DataFrame, можно воспользоваться встроенной функцией pd.read_csv(StringIO(data)):

Python
Скопировать код
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():

Python
Скопировать код
df_semicolon = pd.read_csv(StringIO(data), sep=';')

Работаем с StringIO и read_csv

Для обработки строковых данных как с файловыми рекомендуется использовать io.StringIO. Этот подход позволит pd.read_csv() без особых усилий считывать данные в DataFrame.

Работа с разделителями

Ваши данные могут быть разделены различными символами: запятаями, точками с запятой или, допустим, тильдами. Если разделитель — точка с запятой, рекомендуется передать в функцию параметр sep=';':

Python
Скопировать код
string_data = "Column1;Column2;Column3\n7;8;9\n10;11;12"
df_semicolon = pd.read_csv(StringIO(string_data), sep=';')
print(df_semicolon)

Внимание к деталям гарантирует правильность данных и их корректную загрузку в DataFrame.

Рассматриваем нерегулярные форматы данных

При необходимости настройки разделителя, окруженного пробелами, можно использовать регулярные выражения:

Python
Скопировать код
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, указав важный разделитель:

Python
Скопировать код
pipe_data = "A|B|C\n1|2|3\n4|5|6"
df_pipe = pd.read_csv(StringIO(pipe_data), sep='|')
print(df_pipe)

Визуализация

Можно преобразовать следующую строку в наглядный DataFrame:

Markdown
Скопировать код
Комплексная строка: "Томат=3.42,Огурец=1.25,Кукуруза=0.99"

Для этого будет нужно выполнить два промежуточных шага:

Markdown
Скопировать код
Шаг 1: Разделяем элементы → ['Томат=3.42', 'Огурец=1.25', 'Кукуруза=0.99']
Шаг 2: Разделяем название и цену → [('Томат', '3.42'), ('Огурец', '1.25'), ('Кукуруза', '0.99')]

И, в конечном счете, получим DataFrame с ценами на продукты:

Markdown
Скопировать код
| Продукт  | Цена |
| -------- | ---- |
| Томат    | 3.42 |
| Огурец   | 1.25 |
| Кукуруза | 0.99 |

Так, пошагово, мы можем привести данные из хаоса к структурному порядку.

Дополнительные полезные приемы

Команда для загрузки данных из буфера обмена в DataFrame существует:

  • Применяйте pd.read_clipboard(sep=';') для тестов, но на него не стоит полагаться в реальной работе.

Для пользующихся PyCharm есть полезный плагин:

  • "Pipe Table Formatter" улучшит визуализацию данных, что упрощает их подготовку для загрузки в DataFrame.

Помните о важности качества данных:

  • Перед тем как создавать DataFrame, выполняйте тщательную проверку и очистку данных.

Zаключительная ремарка:

  • pd.read_csv() не только удобен в использовании, но и способен определить названия столбцов и сохранить типы данных.

Полезные материалы

  1. pandas.DataFrame — документация pandas 2.2.0 — все, что нужно знать о создании и управлении DataFrames в Pandas.
  2. Инструменты ввода/вывода (текст, CSV, HDF5, ...) — документация pandas 2.2.0 — функции ввода/вывода в Pandas.
  3. pandas.read_csv — документация pandas 2.2.0 — подробная информация о преобразовании CSV-строки в DataFrame.
  4. io — основные инструменты для работы с потоками — документация Python 3.12.1 — руководство по применению StringIO для создания файлоподобных объектов.
  5. python – Создание DataFrame в Pandas из строки – Stack Overflow — коллекция примеров и обсуждений на тему создания DataFrame из строки.
  6. csv — чтение и запись файлов CSV — документация Python 3.12.1 — обзор модуля csv в Python.
  7. Работа с текстовыми данными — документация pandas 2.2.0 — руководство по работе с текстовыми данными в Pandas.