Как обновить строки с данными без использования dict - PullRequest
0 голосов
/ 22 марта 2019

У меня есть приложение-черточка, которое принимает 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, но это слишком сложно обсуждать здесь.

...