построить несколько графиков строк из датафрейма

Вопрос или проблема

Я пытаюсь прочитать и построить несколько файлов, которые выглядят следующим образом, когда я открываю их с помощью Python, используя pandas read.table. Столбцы для построения – это “dev” против метки времени.

Метка времени должна состоять из столбцов: mm dd,time и yyyy.

    mm dd time yyyy dev st fault typ
0   Jul 5 2:48:29 2018 aaa STANDBY HRW_FAULT neg
1   Jul 5 2:48:29 2018 aaa  SOFT SWF_FAULT  ack
2   Jul 5 2:48:29 2018 aaa HARDWARE  disable
3   Jul 5 2:50:47 2018 bbb STANDBY HRW_FAULT pos

……………

df['DateTime'] = df[['Year', 'Month', 'Day', 'Hour']].apply(lambda s : datetime.datetime(*s),axis = 1)

Это может вызвать ошибку в зависимости от того, правильно ли определен час, как это должно быть в пределах 0-23, секунды – в пределах 0-59 и т.д…

Или попробуйте это

Вы можете передать только столбцы, которые вам нужно собрать.

In [33]: pd.to_datetime(df[['year', 'month', 'day']])
Out[33]: 
0   2015-02-04
1   2016-03-05
dtype: datetime64[ns

]

Согласно документации,

pd.to_datetime ищет стандартные обозначения компонента даты и времени в названиях столбцов, включая:

  • обязательные: год, месяц, день
  • необязательные: час, минута, секунда, миллисекунда, микросекунда, наносекунда

Также другой подход заключается в том, что поскольку это, вероятно, файл .csv, вы можете сделать это во время чтения/разбора самого файла, pandas очень интеллектуален и интересен!

Это делается путем передачи имен столбцов в качестве list([год, месяц, день, время]) параметру parse_dates, или через infer_datetime_format в True, или с использованием пользовательского date_parser в функции pd.read_csv()>…

Надеюсь, это поможет!

Ответ @Aditya уже очень хорош. Я просто хочу предложить альтернативу.

Мы можем считать, что pandas pd.to_datetime имеет встроенный парсер, который может принимать на вход строку даты и времени. Мы можем конструировать эти строки, чтобы они выглядели как стандартные

5/JUl/2018 T2:48:29

Этот формат является стандартным и хорошо распознается pandas.

Следующий dataframe

data = {'mm': ['JUl', 'Jul', 'Jul', 'Jul'],
        'dd': ['5', '5', '5', '5'],
        'time': ['2:48:29', '2:48:29', '2:48:29', '2:50:47'],
        'yyyy': ['2018', '2018', '2018', '2018']}
df = pd.DataFrame(data)

вставьте описание изображения здесь

Мы можем получить желаемый столбец, сделав

df['formatted_datetime'] = pd.to_datetime(df['dd'] + "https://datascience.stackexchange.com/" + df['mm'] + "https://datascience.stackexchange.com/" + df['yyyy'] + ' T' + df['time'])

вставьте описание изображения здесь

Мы также можем проверить типы, используя

df.dtypes

dd object
mm
object
time object
yyyy
object
formatted_datetime datetime64[ns]
dtype: object


Построение столбцов

Вы заметите, что когда вы пытаетесь построить этот df, вы получите ошибку, это происходит потому, что matplotlib не может обрабатывать объекты времени в своей функции построения. У них есть альтернативная функция plot_date, которую можно использовать следующим образом

plt.plot_date(df['formatted_datetime'], df['dev'])
plt.show()

Например, мы воссоздадим те же данные, что и выше, также с столбцом dev. Мы сделаем то же преобразование типа для даты и времени.

data = {'mm': ['JUl', 'Jul', 'Jul', 'Jul'],
        'dd': ['5', '5', '5', '5'],
        'time': ['2:48:29', '2:48:29', '2:48:29', '2:50:47'],
        'yyyy': ['2018', '2018', '2018', '2018'],
        'dev': ['aaa', 'aaa', 'aaa', 'bbb']}

df = pd.DataFrame(data)
df['formatted_datetime'] = pd.to_datetime(df['dd'] + "https://datascience.stackexchange.com/" + df['mm'] + "https://datascience.stackexchange.com/" + 
                                          df['yyyy'] + ' T' + df['time'])

Теперь мы конвертируем категориальное значение dev в числовые значения, мы также будем отслеживать это преобразование, чтобы мы могли установить их на отметках по оси y.

df['dev'] =df['dev'].astype('category')
categorie_codes = dict(enumerate(df['dev'].cat.categories))
df['dev'] =df['dev'].cat.codes

вставьте описание изображения здесь

Затем мы можем построить

plt.plot_date(df['formatted_datetime'], df['dev'])
plt.yticks(range(len(categorie_codes)), list(categorie_codes.values()))
plt.show()

вставьте описание изображения здесь

Ответ или решение

Визуализация нескольких строк DataFrame в Python с использованием Pandas и Matplotlib

Вопрос о том, как визуализировать несколько строк из DataFrame на графике с использованием библиотеки Pandas, вполне актуален для специалистов в области анализа данных и инженерии. Тем более, когда речь идет о временных данных, таких как "dev" против временной метки, собранной из нескольких столбцов. Давайте рассмотрим, как можно выполнить эту задачу, руководствуясь полученной информацией.

Шаг 1: Подготовка данных

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

import pandas as pd

data = {
    'mm': ['Jul', 'Jul', 'Jul', 'Jul'],
    'dd': ['5', '5', '5', '5'],
    'time': ['2:48:29', '2:48:29', '2:48:29', '2:50:47'],
    'yyyy': ['2018', '2018', '2018', '2018'],
    'dev': ['aaa', 'aaa', 'aaa', 'bbb']
}

df = pd.DataFrame(data)

Шаг 2: Форматирование временной метки

Теперь нам необходимо создать столбец с форматированными временными метками, чтобы использовать его в графиках. Вы можете сделать это с помощью функции pd.to_datetime(), объединив нужные столбцы:

df['formatted_datetime'] = pd.to_datetime(df['dd'] + ' ' + df['mm'] + ' ' + df['yyyy'] + ' ' + df['time'])

Это объединит столбцы "день", "месяц", "год" и "время" в стандартный формат даты и времени, который поддерживается библиотекой Pandas.

Шаг 3: Подготовка данных для визуализации

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

df['dev'] = df['dev'].astype('category')
categorie_codes = dict(enumerate(df['dev'].cat.categories))
df['dev'] = df['dev'].cat.codes

Шаг 4: Визуализация данных с использованием Matplotlib

Теперь мы готовы создать график, на котором временная метка будет показана по оси X, а значения dev по оси Y. Для этого мы будем использовать метод plt.plot_date():

import matplotlib.pyplot as plt

plt.plot_date(df['formatted_datetime'], df['dev'], linestyle='solid')

plt.yticks(range(len(categorie_codes)), list(categorie_codes.keys()))
plt.xticks(rotation=45)
plt.xlabel('Время')
plt.ylabel('Устройство')
plt.title('График зависимостей устройства от времени')
plt.tight_layout()
plt.show()

Заключение

Таким образом, шаг за шагом мы прошли путь от загрузки данных до их визуализации. Данный процесс иллюстрирует, как легко можно работать с временными данными в Python, используя библиотеки Pandas и Matplotlib. С помощью вышеизложенных шагов вы сможете эффективно визуализировать множество строк из DataFrame, соответствующих вашим требованиям. Такой подход может быть полезен не только для анализа данных, но и для создания отчётов и других визуальных представлений.

SEO Оптимизация

Для улучшения видимости этой статьи в поисковых системах используйте ключевые слова, такие как «Pandas», «Matplotlib», «визуализация данных в Python», «временные метки» и «анализ данных». Такой контент будет полезен как начинающим, так и опытным программистам, работающим в области анализа данных.

Оцените материал
Добавить комментарий

Капча загружается...