Pandas KeyError при тестировании приложения Da sh на Django сервере - PullRequest
0 голосов
/ 18 февраля 2020

Итак, я занимаюсь разработкой сайта Django для приложения Da sh, и после долгих исследований я застрял в этом треке с этой ключевой ошибкой. Я использую PyMon go для извлечения данных в Pandas DataFrame. Когда я запускаю код построчно в блокноте, он запускается без ошибок, но как только я пытаюсь обновить свое приложение с помощью Da sh RangeSlider, я получаю эту KeyError.

  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django_plotly_dash/views.py", line 74, in update
    return _update(request, ident, stateless, **kwargs)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django_plotly_dash/views.py", line 93, in _update
    resp = view_func()
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django_plotly_dash/dash_wrapper.py", line 505, in dispatch
    return self.dispatch_with_args(body, argMap=dict())
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/django_plotly_dash/dash_wrapper.py", line 565, in dispatch_with_args
    res = self.callback_map[target_id]['callback'](*args, **argMap)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/dash/dash.py", line 1339, in add_context
    output_value = func(*args, **kwargs)  # %% callback invoked %%
  File "/home/xristos/projects/2020-primary-election-tracker/tw33tyPyElections/homepage/dash_apps/finished_apps/sentiment.py", line 84, in update_figure
    dates_df = can_data.set_index(can_data['date'], drop=True)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 2980, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/xristos/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2899, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'date'

Это основа кода, который у меня есть.

    dcc.Dropdown(
        id = 'candidate-options',
        options = options,
        value = 'Joey'
    ),
    dcc.Graph(
        id = 'sentiment-line-chart'),
    dcc.RangeSlider(
        id = 'date_slider',
        min = unixTimeMillis(daterange.min()),
        max = unixTimeMillis(daterange.max()),
        allowCross = False,
        updatemode ='drag',
        value = [unixTimeMillis(daterange.min()), unixTimeMillis(daterange.max())],
        marks = getMarks(daterange.min(), daterange.max())
    )
])

@app.callback(
    dash.dependencies.Output('sentiment-line-chart', 'figure'),
    [dash.dependencies.Input('candidate-options', 'value'),
    dash.dependencies.Input('date_slider','min'),
    dash.dependencies.Input('date_slider','max')])

def update_figure(value,min,max):
    can_data = pd.DataFrame([x for x in coll.find({'date':{'$gt':datetime(2020, 2, 1, 0, 0, 0),'$lt':datetime(2020, 2, 5, 0, 0, 0)},'candidate':value})])
    dates_df = can_data.set_index(can_data['date'], drop=True)
    dates = [pd.Timestamp(x) for x in can_data['date']]
    filtered_data = dates_df[min:max].resample('H').mean()
    data = dict(
        x = [row['sentiment'] for i,row in filtered_data[['sentiment']].iterrows()],
        y = dates
    )
    return {
        'data': data,
        'layout': dict(
            xaxis={'type': 'date', 'title': 'Dates',
                   'range':[min, max]},
            yaxis={'title': 'Sentiment', 'range': [can_data.sentiment.min(), can_data.sentiment.max()]},
            hovermode='closest',
            transition = {'duration': 500},
        )
    }```

Also, I am using django-plotly-dash to integrate the two, if that helps. Any advice is appreciated!
...