фрейм данных дублируется во всех столбцах вместо разделения данных на разные столбцы - PullRequest
0 голосов
/ 22 января 2019

Я создаю словарь, собирая данные из тиков, затем добавляю словарь в новый фрейм данных с 3 columns, как и в словаре.Проблема в том, что словарь добавляется в фрейм данных, но в каждом столбце фрейма данных есть копия добавленных словарей в виде одного фрейма данных.Извините, если я не смог четко объяснить проблему.Я очень новичок в разработке, и любая поддержка будет высоко ценится.Является ли bcoz of pycharm способом отображения результата?

Кроме того, кто-то может сказать мне, как рассчитывать время в секундах вместо чисел и как сделать повторную выборку в добавленном кадре данных в течение 1 минуты на LTPстолбец.

ниже мой код:

df_cols = ["Token", "LTP", "Volume"]

data_frame = pd.DataFrame(data=[], columns=df_cols, index=[])

def on_ticks(ws, ticks):  # retrive continius ticks in JSON format
    global data_frame, df_cols

data = dict()

for tick in ticks:
    token = tick["instrument_token"]
    ltp = tick["last_price"]
    volume = tick["volume"]
    timestamp = str(datetime.datetime.now().time())

    data[timestamp] = [token, ltp, volume]
    print(data)

tick_df = pd.DataFrame(data.values(), columns=df_cols, index=data.keys())

data_frame = data_frame.append(tick_df)

print(data_frame.tail())

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

for -> print(data) = {'15:27:39.544348': [779521, 290.9, 11236092]}

для -> print (data_frame.tail ()) =

    Token     LTP   Volume
15:27:39.544348   779521   290.9  11236092   
15:27:40.144447   779521   290.95 11236092

Фактический результат для -> печати (данные) = {'15:27:39.544348': [779521, 290.9, 11236092]}

для -> печати (data_frame.tail ()) =

    Token                           LTP  \
15:27:39.544348   ([779521, 290.9, 11236092])   ([779521, 290.9, 11236092])   
15:27:40.144447  ([779521, 290.95, 11236092])  ([779521, 290.95, 11236092])   
                                       Volume  
15:27:39.544348   ([779521, 290.9, 11236092])  
15:27:40.144447  ([779521, 290.95, 11236092]) 

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Проблема с data.values ​​(), одно решение, которое мне приходит, это использовать pd.dataframe.append , но не так, как у вас:

Перед цикломВы инициализируете tick_df:

tick_df = pd.DataFrame(columns=df_cols)

Затем в цикле вы обновляете tick_df:

for tick in ticks:
    token = tick["instrument_token"]
    ltp = tick["last_price"]
    volume = tick["volume"]
    timestamp = str(datetime.datetime.now().time())

    tick_df = tick_df.append(pd.DataFrame(dict(zip(df_cols,(token,ltp,volume))),index=[timestamp]))

print(tick_df.tail())
0 голосов
/ 22 января 2019

Я думаю, что проблема в том, что data.values ​​() содержит все данные. Вы должны попытаться добавить их либо построчно, либо в виде пустых массивов.если вы предоставите небольшие данные, мы можем помочь вам больше.

...