- Вопрос или проблема
- Построение столбцов
- Ответ или решение
- Визуализация нескольких строк DataFrame в Python с использованием Pandas и Matplotlib
- Шаг 1: Подготовка данных
- Шаг 2: Форматирование временной метки
- Шаг 3: Подготовка данных для визуализации
- Шаг 4: Визуализация данных с использованием Matplotlib
- Заключение
- SEO Оптимизация
Вопрос или проблема
Я пытаюсь прочитать и построить несколько файлов, которые выглядят следующим образом, когда я открываю их с помощью 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», «временные метки» и «анализ данных». Такой контент будет полезен как начинающим, так и опытным программистам, работающим в области анализа данных.