我正在通过从刻度收集数据来创建字典,然后将字典附加到具有3 columns
的新数据框中,与字典中的相同。问题是,字典将被追加到数据帧中,但是数据帧的每一列都具有一个附加字典的副本作为单个数据帧。对不起,如果我无法清楚地说明问题。我对开发非常陌生,任何支持将不胜感激。 pycharm的bcoz是显示结果的方式吗?
另外,有人可以告诉我如何用秒而不是数字计时,以及如何在LTP列上对附加数据帧进行1分钟的重新采样。
下面是我的代码:
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
实际结果
对于-> print(data)= {'15:27:39.544348': [779521, 290.9, 11236092]}
用于-> print(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])
答案 0 :(得分:0)
我认为问题在于data.values()包含所有数据。您应该尝试逐行或以numpy数组的形式附加它。如果您会提供一些小数据,我们可以为您提供更多帮助。
答案 1 :(得分:0)
问题出在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())