У меня есть приложение-черточка, которое принимает CSV-файл, и с этого обновляет объект с данными (из библиотеки dash_table_experiments
).В настоящее время я читаю в CSV, декодирую и, в конечном счете, преобразую его в dict, чтобы я мог обновить строки таблицы данных.
Для больших файлов, однако, операция to_dict()
слишком медленная, естьдругой способ передать данные из файла CSV в таблицу данных и обновить строки?Например, было бы замечательно, если бы я мог как-то обновить строки, используя вместо этого строку в стиле json, так как это намного быстрее для вычисления.
В настоящее время мой код выглядит примерно так:
@app.callback(Output('uploaded-data', 'hidden'),
[Input('upload-data', 'contents')],
[State('upload-data', 'filename')])
def update_hidden_datatable(contents, filename):
global base_data
if contents is not None:
content_type, content_string = contents.split(',')
decoded = base64.b64decode(content_string)
try:
if '.csv' in filename:
# Assume that the user uploaded a CSV file
df = pd.read_csv(io.StringIO(decoded.decode('utf-8')), low_memory = False)
elif '.xls' in filename:
# Assume that the user uploaded an excel file
df = pd.read_excel(io.BytesIO(decoded))
except Exception as e:
print(e)
return base_data.to_dict('r')
for column in df.select_dtypes(include=[bool]):
df[column] = df[column].map({True: 'true', False: 'false'})
return df.to_dict('r')
return base_data.to_dict('r')
# Updates the rows of the main datatable when the hidden uploaded-data value is updated
@app.callback(Output('datatable', 'rows'),
[Input('uploaded-data', 'hidden')])
def update_datatable(hidden):
return hidden
Есть причина, по которой я сначала храню данные в скрытом div, но это слишком сложно обсуждать здесь.