【发布时间】:2021-08-16 11:44:19
【问题描述】:
filename = r'C:\Users\91956\Desktop\File.csv'
df = pd.read_csv(filename)
ss = WebSocket(FEED_TOKEN, CLIENT_CODE)
def on_tick(ws, tick):
ltp = tick[0]['ltp']
token = tick[0]['tk']
df['ltp'][df.tk == token] = ltp
ss.on_ticks = on_tick
ss.connect()
st.write(df)
数据框df 包含列tk 和ltp。
我想使用刻度数据更改ltp 列中的值,所以我正在这样做,
df['ltp'][df.tk == token] = ltp
我开始担心了
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df['ltp'][df.tk == token] = ltp
我试图从上面的链接访问该页面,但它不存在。
我正在使用 streamlit 显示数据帧,
我希望看到ltp 列的单元格中的值发生变化
但这不会发生
这意味着df['ltp'][df.tk == token] = ltp 没有更新df,
如何做到这一点?
更新:
使用loc 后,出现此错误
raise IndexingError(key) from e
pandas.core.indexing.IndexingError: ('ltp', 0 False
1 False
2 False
3 False
4 False
...
154 False
155 False
156 False
157 False
158 False
Name: tk, Length: 159, dtype: bool)
【问题讨论】:
-
查看我关于正确使用
.loc的答案 -
@SeaBean 是的,你的答案是正确的,
-
很高兴为您提供帮助!请记得accept the answer。
-
@SeaBean 我应该在哪里写 st.write(df) 以便更新的数据框显示在浏览器中,我尝试将其写入 on_tick 函数,但它为每次更新创建了一个新的数据框。我希望单个数据框得到更新。
-
你应该把它放在 on_tick 函数之外,并且可能在处理其他更新结束时。