Ошибка тире при возврате массива: Неверный аргумент Ожидаемый объект. Был предоставлен тип `строка` - PullRequest
0 голосов
/ 01 октября 2019

Я изучаю и использую Dash для своей компании, и мне очень трудно это понять.
Я пытаюсь загрузить DataFrame и получить индекс этих DF. У меня может быть 2 типа индексов:
Базы данных:

['01/08/2019', '02/08/2019', '03/08/2019', '04/08/2019', '05/08/2019', '06/08/2019', '07/08/2019', '08/08/2019', '09/08/2019', '10/08/2019', '11/08/2019', '12/08/2019', '13/08/2019', '14/08/2019', '15/08/2019', '16/08/2019', '17/08/2019', '18/08/2019', '19/08/2019', '20/08/2019', '21/08/2019', '22/08/2019', '23/08/2019', '24/08/2019', '25/08/2019', '26/08/2019', '27/08/2019', '28/08/2019', '29/08/2019', '30/08/2019', '31/08/2019']

На основе имени:

['CARD0000071608', 'CARD0000071608', 'CARD0000071608', 'CARD0000071608', 'CARD0000071608', 'CARD0000071608', 'CARD0000071608', 'CARD0000464753', 'CARD0000464753', 'CARD0000464753', 'CARD0000464753', 'CARD0000464753', 'CARD0000464753', 'CARD0000550035', 'CARD0000550035', 'CARD0000550035', 'PRM30000210731689', 'PRM30000210731689', 'PRM30000210731689', 'PRM30000210731689', 'PRM30000210731689', 'PRM30000210731689', 'PRM30000210731689', 'PRM30001441205960', 'PRM30001441205960', 'PRM30001441205960', 'PRM30001441205960', 'PRM30001441205960', 'PRM30001441205960', 'PRM30001441205960', 'PRM30001640097183', 'PRM30001640097183', 'PRM30001640097183', 'PRM30001640097183', 'PRM30001640097183', 'PRM30001640097183']

Это ошибка, которую я получаю:

Недопустимый аргумент options[0] передан в раскрывающийся список с идентификатором "index-df". Ожидаемый object.
Был предоставлен тип string.

Я хотел бы иметь возможность вернуть такой диктовку: {'csv': index} или {'txt': index}, чтобы я мог использовать разныедействие, если файл является csv или txt.

Я пытался сохранить свой индекс в массиве или dict с именем index.
Я пытался использовать json.dumps(index)сериализовать мой массив / dict, хранящий мои индексы, но это не сработало. Я не понимаю, в чем проблема, и я потратил как минимум 5 часов, пытаясь разобраться в этой проблеме. Дэш должен уметь справляться со строками, верно? Я убедился, чтобы преобразовать мои значения в строку, но это не работает. Он пытался использовать JSON, но он не работает.

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import json

import pandas as pd
import plotly.graph_objs as go
from functions_definition import list_every_file
from functions_definition import load_file

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)


# list every csv and txt files
FILE_LIST = list_every_file('../data', ['csv', 'TXT'])

# list the files with their extension (csv or txt)
DICT_EXTENSION = {}
txt_arr = []
csv_arr = []
for item in FILE_LIST:
    if item[-3:].lower() == 'txt':
        txt_arr.append(item)
    else:
        csv_arr.append(item)
DICT_EXTENSION['txt'] = txt_arr
DICT_EXTENSION['csv'] = csv_arr

markdown_intro = '''
### File selection 

1. Please select the type of file (TXT or CSV) you want to open.   
'''

markdown_intro_2 = '''
2. Please select the file you want to open.   
'''

markdown_intro_3 = '''
3. Please select the day.   
'''

app.layout = html.Div([
    dcc.Markdown(children=markdown_intro),

    dcc.RadioItems(
        id='filetype-dropdown',
        options=[{'label': k, 'value': k} for k in DICT_EXTENSION.keys()],
        value='txt'
    ),

    html.Hr(),

    dcc.Markdown(children=markdown_intro_2),

    dcc.Dropdown(
        id='file-selection',
        options=[{'label': k, 'value': k} for k in FILE_LIST],
        value=FILE_LIST[0],          # default value
        clearable=False
    ),

    html.Hr(),

    dcc.Markdown(children=markdown_intro_3),
    dcc.Dropdown(id='index-df')

])

# choose between 'txt' and 'csv'
@app.callback(
    Output('file-selection', 'options'),
    [Input('filetype-dropdown', 'value')])
def set_cities_options(selected_country):
    #print("type = ", type([{'label': i, 'value': i} for i in DICT_EXTENSION[selected_country]]))
    return [{'label': i, 'value': i} for i in DICT_EXTENSION[selected_country]]



@app.callback(
    Output('index-df', 'options'),
    [Input('file-selection', 'value')])
def set_cities_options(selected_df):
    selected_df = str(selected_df)

    file_name = selected_df[0:-4]
    extension = (selected_df[-3:]).lower()
    df = load_file('../data/' + file_name, extension)

    index = []
    if extension == 'csv':
        for i in range(len(df)):
            index.append(df.index[i][0])

    else:
        index = df.index
        index = index.values.tolist()

    print(index)
    print(type(index))
    return index

if __name__ == '__main__':
    app.run_server(debug=True)

Возможно, ошибка связана с value=FILE_LIST[0] в Dropdown с идентификатором file-selection. Но если я не поставлю эту строку, при первой загрузке программы она загружает None вместо файла, что приводит к ошибке программы. Я не знаю, что делать со значением None, поэтому я выставил значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...