【问题标题】:how to update a cell value in pandas dataframe如何更新熊猫数据框中的单元格值
【发布时间】: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 包含列tkltp

我想使用刻度数据更改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 函数之外,并且可能在处理其他更新结束时。

标签: python pandas streamlit


【解决方案1】:

可以使用.loc,第一个参数为条件,第二个参数为列名,如下:

df.loc[df.tk == token, 'ltp'] = ltp

【讨论】:

    【解决方案2】:

    该页面应该存在,它对我有用 这是一个经典错误:使用 .loc[] 而不是 [][]

    【讨论】:

    • ` raise IndexingError(key) from e pandas.core.indexing.IndexingError: ('ltp', 0 False` 我收到此错误
    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 2017-03-23
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多