Я изучаю и использую 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, поэтому я выставил значение по умолчанию.