Как изменить панду Dataframe и как Взаимодействовать с plot dash gui frameworkout html основных компонентов - PullRequest
2 голосов
/ 19 сентября 2019

Hopfly, кто-нибудь, помогите мне:) ....

Из моего предыдущего вопроса Как изменить значения столбцов в пандах.1005 *

Я пытался с regex и replace

ext_sites.replace(to_replace= ext_sites['Pending  ']._where(values), value='aaaaaaaaaaaaaaaaaaaaaaa', regex=False)

, затем я получил эту ошибку

Traceback (most recent call last):
  File "C:/Users/DELL/PycharmProjects/Gov-Trac-Tool/updateMyDF.py", line 39, in <module>
    ext_sites.replace(to_replace= ext_sites['Pending  ']._where(values), value='aaaaaaaaaaaaaaaaaaaaaaa', regex=False)
  File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site-packages\pandas\core\generic.py", line 8572, in _where
    raise ValueError('Array conditional must be same shape as '
ValueError: Array conditional must be same shape as self

Для обновленного примера

Перед обновлениемdataframe

 |-------------------------------------------------------|
 |SiteCode      | Pending |  Pending Status   |  Example |
 |-------------------------------------------------------|
 |LCAIE10002    | TE      |    tttt           |  cccc    |
 |LCAIN30531    | Opt.    |    tttt           |  cccc    |
 |LCAIW10207    | pp      |    tttt           |  cccc    |
 |LCAIE30089    | Opt.    |    tttt           |  cccc    |
 |LSINI16321    | TE      |    tttt           |  cccc    |
 |LCAIE30216    | TE      |    tttt           |  cccc    |
 |LCAIW20282    | PP      |    tttt           |  cccc    |
 |-------------------------------------------------------| 

Так что теперь мне нужно изменить значения двух столбцов Pending со значением aaaa и Pending Status со значениями bbbb с разными значениями, поэтому

Ожидаемый результат

 |-------------------------------------------------------|
 |SiteCode      | Pending |  Pending Status   |  Example |
 |-------------------------------------------------------|
 |LCAIE10002    | TE      |    tttt           |  cccc    |
 |LCAIN30531    | Opt.    |    tttt           |  cccc    |
 |LCAIW10207    | pp      |    tttt           |  cccc    |
 |LCAIE30089    | aaaa    |    bbbb           |  cccc    |
 |LSINI16321    | aaaa    |    bbbb           |  cccc    |
 |LCAIE30216    | TE      |    tttt           |  cccc    |
 |LCAIW20282    | PP      |    tttt           |  cccc    |
 |-------------------------------------------------------|

Так что если кто-то заинтересован в этом случае, я должен взаимодействовать с plot dash framework, как мои предыдущие вопросы

Как заполнитьРаскрывающийся список с использованием Dash, pandas, mysql и python

Как использовать @ app.callback для возврата DropDown, который должен быть включен

Просто хочу сделатьинструмент, который создает файл Data Visualization для excel, используя этот simple frameworkout, поскольку он только что выпущен, так как я считаю единственным источникомявляется официальным веб-сайтом

https://dash.plot.ly/, поскольку он поддерживает pandas dataframe, поскольку я могу экспортировать из Dash DataTable Я создал обновленные данные в фрейме данных

Я надеюсь, что это будет достаточно ясно

Во-вторых, есть ли способ divide этот процесс в некоторых modules oop, или это не обязательно делать?

Iнадеюсь увидеть некоторые новые идеи, с небольшой помощью:)

Отредактировано

Вот мой dash plot графический интерфейс выглядит как

import dash
import dash_table
import pandas as pd
from myPandas import ext_sites, myOutlook_inBox
from updateMyDF import ext_sites, myOutlook_inBox
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
from dash.dependencies import Input, Output, State
import base64
import datetime
import io

app = dash.Dash(__name__)

app.layout = app.layout = html.Div([
    dash_table.DataTable(
        id='table',
        columns=[{"name": i, "id": i} for i in ext_sites.columns],
        data=ext_sites.to_dict("rows"),

        style_table={
            'height': '300px',
            'overflowY': 'scroll',
            'border': 'thin lightgrey solid'
        },

        page_action='native',
        page_current=0,
        page_size=10,
        style_header={'backgroundColor': 'rgb(255, 255, 0)', 'fontWeight': 'bold'}
    ),

    dcc.Upload(
        id='upload-data',
        children=html.Div([
            'Drag and Drop or ',
            html.A('Select Files')
        ]),
        style={
            'width': '100%',
            'height': '60px',
            'lineHeight': '60px',
            'borderWidth': '1px',
            'borderStyle': 'dashed',
            'borderRadius': '5px',
            'textAlign': 'center',
            'margin': '10px'
        },
        # Allow multiple files to be uploaded
        multiple=True
    ),
    html.Div(id='output-data-upload'),
])


def parse_contents(contents, filename, date):
    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')))
        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 html.Div([
            'There was an error processing this file.'
        ])

    return html.Div([
        html.H5(filename),
        html.H6(datetime.datetime.fromtimestamp(date)),

        dash_table.DataTable(
            data=df.to_dict('records'),
            columns=[{'name': i, 'id': i} for i in df.columns]
        ),

        html.Hr(),  # horizontal line

        # For debugging, display the raw contents provided by the web browser
        html.Div('Raw Content'),
        html.Pre(contents[0:200] + '...', style={
            'whiteSpace': 'pre-wrap',
            'wordBreak': 'break-all'
        })
    ])


@app.callback(Output('output-data-upload', 'children'),
              [Input('upload-data', 'contents')],
              [State('upload-data', 'filename'),
               State('upload-data', 'last_modified')])
def update_output(list_of_contents, list_of_names, list_of_dates):
    if list_of_contents is not None:
        children = [
            parse_contents(c, n, d) for c, n, d in
            zip(list_of_contents, list_of_names, list_of_dates)]
        return children
if __name__ == '__main__':
    app.run_server(debug=True)

Отредактировано

Я даже пытаюсь использовать это

mytuple = tuple(map(int, values.split(' ')))

ext_sites.set_value(mytuple, 'Pending  ', 'aaaaaaaaaaaaaaaaaa')

, но я нахожу эту ошибку

  File "C:/Users/DELL/PycharmProjects/Gov-Trac-Tool/updateMyDF.py", line 34, in <module>
    mytuple = tuple(map(int, values.split(' ')))
AttributeError: 'tuple' object has no attribute 'split'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...