数据框在所有列中复制,而不是将数据拆分为不同的列
dataframe getting duplicated int all the columns instead of splitting the data into different columns
我正在通过从报价中收集数据来创建一个字典,然后将字典附加到一个新的数据框中 3 columns
,就像在字典中一样。问题是,字典被附加到数据框中,但数据框的每一列都有附加字典的副本作为单个数据框。对不起,如果我无法清楚地解释这个问题。我对开发非常陌生,非常感谢任何支持。 pycharm 结果的显示方式有问题吗?
此外,有人可以告诉我如何以秒而不是数字为单位计时,以及如何在 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]}
for -> 打印(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]}
for -> 打印(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])
我认为问题是 data.values() 包含所有 data.You 应该尝试逐行附加它或作为 numpy 数组。如果您要生成一些小数据,我们可以为您提供更多帮助。
问题出在 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())
我正在通过从报价中收集数据来创建一个字典,然后将字典附加到一个新的数据框中 3 columns
,就像在字典中一样。问题是,字典被附加到数据框中,但数据框的每一列都有附加字典的副本作为单个数据框。对不起,如果我无法清楚地解释这个问题。我对开发非常陌生,非常感谢任何支持。 pycharm 结果的显示方式有问题吗?
此外,有人可以告诉我如何以秒而不是数字为单位计时,以及如何在 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]}
for -> 打印(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]}
for -> 打印(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])
我认为问题是 data.values() 包含所有 data.You 应该尝试逐行附加它或作为 numpy 数组。如果您要生成一些小数据,我们可以为您提供更多帮助。
问题出在 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())