#python #pandas #plotly
#python #pandas #plotly
Вопрос:
Я пытаюсь использовать plotly express для отображения данных временных рядов.
Я получаю эту ошибку.В моем коде нет логических значений, поэтому я не понимаю, почему он не может обработать этот код.
ValueError: значение истинности индекса неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all().
Я посмотрел на тип данных фрейма данных, транспонировал и попытался отредактировать данные временной оси. Dtype — это dtype(‘0’).
import pandas as pd
import numpy as np
import plotly_express as px
df = pd.read_excel('FreewayFDSData.xlsx', 'Volume')
df = df.set_index("Row Labels")
detector =df.columns
time = df.index
px.scatter(df, x=detector,y=time)
Конечным результатом, к сожалению, является код ошибки.
https://www.plotly.express / <- это руководство plotly Express, которому я следую.
df.head().to_dict()
{'3674S_P1': {'00:00 - 00:15': 88.0,
'00:15 - 00:30': 116.0,
'00:30 - 00:45': 84.0,
'00:45 - 01:00': 68.0,
'01:00 - 01:15': 76.0},
'3674S_P0': {'00:00 - 00:15': 88.0,
'00:15 - 00:30': 116.0,
'00:30 - 00:45': 76.0,
'00:45 - 01:00': 68.0,
'01:00 - 01:15': 76.0},
'3674M_P1': {'00:00 - 00:15': 84.0,
'00:15 - 00:30': 108.0,
'00:30 - 00:45': 68.0,
'00:45 - 01:00': 68.0,
'01:00 - 01:15': 72.0},
'3674M_P0': {'00:00 - 00:15': 92.0,
'00:15 - 00:30': 108.0,
'00:30 - 00:45': 68.0,
'00:45 - 01:00': 68.0,
'01:00 - 01:15': 72.0},
'3674EL_P1': {'00:00 - 00:15': 96.0,
'00:15 - 00:30': 112.0,
'00:30 - 00:45': 64.0,
'00:45 - 01:00': 64.0,
'01:00 - 01:15': 88.0},
'3674EL_P0': {'00:00 - 00:15': 108.0,
'00:15 - 00:30': 124.0,
'00:30 - 00:45': 68.0,
'00:45 - 01:00': 80.0,
'01:00 - 01:15': 100.0},
'14549IB_P1': {'00:00 - 00:15': 380.0,
'00:15 - 00:30': 412.0,
'00:30 - 00:45': 380.0,
'00:45 - 01:00': 328.0,
'01:00 - 01:15': 320.0},
'14549IB_P0': {'00:00 - 00:15': 376.0,
'00:15 - 00:30': 408.0,
'00:30 - 00:45': 376.0,
'00:45 - 01:00': 328.0,
'01:00 - 01:15': 328.0},
'14548IB_P1': {'00:00 - 00:15': 464.0,
'00:15 - 00:30': 508.0,
'00:30 - 00:45': 448.0,
'00:45 - 01:00': 408.0,
'01:00 - 01:15': 376.0},
'14548IB_P0': {'00:00 - 00:15': 464.0,
'00:15 - 00:30': 508.0,
'00:30 - 00:45': 444.0,
'00:45 - 01:00': 404.0,
'01:00 - 01:15': 376.0},
'14547IB_P1': {'00:00 - 00:15': 501.33333333333337,
'00:15 - 00:30': 528.0,
'00:30 - 00:45': 501.33333333333337,
'00:45 - 01:00': 432.0,
'01:00 - 01:15': 437.33333333333337},
'14547IB_P0': {'00:00 - 00:15': 460.0,
'00:15 - 00:30': 520.0,
'00:30 - 00:45': 440.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 380.0},
'14546IB_P1': {'00:00 - 00:15': 468.0,
'00:15 - 00:30': 536.0,
'00:30 - 00:45': 440.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 380.0},
'14546IB_P0': {'00:00 - 00:15': 464.0,
'00:15 - 00:30': 532.0,
'00:30 - 00:45': 436.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 376.0},
'14545IB_P1': {'00:00 - 00:15': 464.0,
'00:15 - 00:30': 524.0,
'00:30 - 00:45': 448.0,
'00:45 - 01:00': 400.0,
'01:00 - 01:15': 384.0},
'14545IB_P0': {'00:00 - 00:15': 468.0,
'00:15 - 00:30': 516.0,
'00:30 - 00:45': 444.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 380.0},
'14544IB_P1': {'00:00 - 00:15': 440.0,
'00:15 - 00:30': 516.0,
'00:30 - 00:45': 440.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 380.0},
'14544IB_P0': {'00:00 - 00:15': 444.0,
'00:15 - 00:30': 512.0,
'00:30 - 00:45': 444.0,
'00:45 - 01:00': 392.0,
'01:00 - 01:15': 364.0},
'14543IB_P1': {'00:00 - 00:15': 456.0,
'00:15 - 00:30': 524.0,
'00:30 - 00:45': 440.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 364.0},
'14543IB_P0': {'00:00 - 00:15': 452.0,
'00:15 - 00:30': 528.0,
'00:30 - 00:45': 444.0,
'00:45 - 01:00': 400.0,
'01:00 - 01:15': 368.0},
'14542IB_P1': {'00:00 - 00:15': 444.0,
'00:15 - 00:30': 516.0,
'00:30 - 00:45': 432.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 368.0},
'14542IB_P0': {'00:00 - 00:15': 444.0,
'00:15 - 00:30': 528.0,
'00:30 - 00:45': 428.0,
'00:45 - 01:00': 396.0,
'01:00 - 01:15': 356.0},
'14540IB_P1': {'00:00 - 00:15': 384.0,
'00:15 - 00:30': 412.0,
'00:30 - 00:45': 352.0,
'00:45 - 01:00': 340.0,
'01:00 - 01:15': 300.0},
'14540IB_P0': {'00:00 - 00:15': 384.0,
'00:15 - 00:30': 408.0,
'00:30 - 00:45': 348.0,
'00:45 - 01:00': 332.0,
'01:00 - 01:15': 304.0},
'14537IB_P1': {'00:00 - 00:15': 420.0,
'00:15 - 00:30': 420.0,
'00:30 - 00:45': 340.0,
'00:45 - 01:00': 330.0,
'01:00 - 01:15': 300.0},
'14537IB_P0': {'00:00 - 00:15': 530.0,
'00:15 - 00:30': 565.0,
'00:30 - 00:45': 455.0,
'00:45 - 01:00': 445.0,
'01:00 - 01:15': 420.0},
'14536IB_P1': {'00:00 - 00:15': 296.0,
'00:15 - 00:30': 260.0,
'00:30 - 00:45': 300.0,
'00:45 - 01:00': 212.0,
'01:00 - 01:15': 260.0},
'14536IB_P0': {'00:00 - 00:15': 304.0,
'00:15 - 00:30': 256.0,
'00:30 - 00:45': 290.0,
'00:45 - 01:00': 208.0,
'01:00 - 01:15': 256.0},
'14405WB_P1': {'00:00 - 00:15': 504.0,
'00:15 - 00:30': 520.0,
'00:30 - 00:45': 456.0,
'00:45 - 01:00': 428.0,
'01:00 - 01:15': 376.0},
'14405WB_P0': {'00:00 - 00:15': 504.0,
'00:15 - 00:30': 524.0,
'00:30 - 00:45': 448.0,
'00:45 - 01:00': 420.0,
'01:00 - 01:15': 376.0}}
Комментарии:
1. Не возражаете поделиться
df.head().to_dict()
?2. df.head().to_dict()
Ответ №1:
Я не думаю, что вы можете использовать plotly_express для вашей проблемы, поскольку x
и y
должны быть строками. Проверьте вывод px.scatter?
px.scatter?
data_frame: A 'tidy' `pandas.DataFrame`
x: (string, name of column in `data_frame`) Values from this column are used to position marks along the x axis in cartesian coordinates.
y: (string, name of column in `data_frame`) Values from this column are used to position marks along the y axis in cartesian coordinates.
Учитывая, что при установке plotly_express вы также получаете plotly, вы можете просто использовать
import plotly.offline as py
import plotly.graph_objs as go
import pandas as pd
# here I'm using your df.head().to_dict() as dct
df = pd.DataFrame(dct)
traces = [go.Scatter(x=df.index,
y=df[col],
name=col)
for col in df.columns]
py.iplot(traces)
Комментарии:
1. Привет, я автор Plotly Express, и это действительно так прямо сейчас. Мы рассматриваем возможность добавления возможности передачи в df.index или df.my_column … обсуждение в github.com/plotly/plotly_express/issues/37
2. Тем временем я добавил более строгую проверку и улучшенные сообщения об ошибках, чтобы избежать этой проблемы 🙂
Ответ №2:
На моем телефоне прямо сейчас, но хотел помочь как можно скорее, поэтому я обработаю правильное форматирование позже.
Похоже, что проблема здесь в типе данных. Вы устанавливаете time = df.index
, а затем назначаете время y в px.scatter(df, x=detector,y=time)
. И первое значение df.index
равно 36745_P1
. Итак, насколько я могу судить прямо сейчас, это ваша проблема. Какие значения для x и y вы действительно хотите построить?
Комментарии:
1. Я хочу построить все из них, если это возможно, чтобы все детекторы сравнивались со временем
2. Чтобы использовать Plotly Express, вам пришлось бы изменить форму ваших данных, чтобы они имели три столбца: время, детектор, значение. Для формы данных, которые у вас есть, вы, вероятно, захотите использовать
cufflinks
для выполненияdf.iplot(...)
.