为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用熊猫执行以下任务,该任务更快且不会发出警告“ SettingWithCopyWarning”

如何使用熊猫执行以下任务,该任务更快且不会发出警告“ SettingWithCopyWarning”

湖上湖 2021-03-31 10:15:21
我正在从数据访问时间戳。如果多个时间戳具有相同的值,则更改它们。在这种情况下,如果两个相同,则将2添加到第二个时间戳。如果三个相同,则将2加到第二,再将4加到第三,依此类推。我收到警告/anaconda/lib/python3.6/site-packages/ipykernel/ main .py:8:SettingWithCopyWarning:试图在DataFrame的切片副本上设置一个值请参阅文档中的警告:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy我的问题是:执行任务花费的时间太长。我想知道是否有一些特定的方法可以在大熊猫中以更精确的方式执行任务。请考虑我是熊猫新手。dftime =df.time for i in range (len(dftime)):    if i!=0:        if dftime[i]==dftime[i-1]:            dftime[i]=dftime[i]+2        if dftime[i]<dftime[i-1]:            dftime[i]=dftime[i-1]+2
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

通常,永远不要使用该for i in range(len(collection))构造来迭代Python中的集合,因为您可以简单地使用for item in collection。


特别是在大熊猫中,您几乎不必迭代序列,如果这样做,则永远不要修改要迭代的对象。根据数据类型,迭代器可能会返回一个副本,对其进行写入将无效。相反,您应该选择对整个阵列进行操作。


大熊猫重写代码的方法是


dftime = df.time

dftime[dftime == dftime.shift()] += 2

dftime[dftime < dftime.shift()] += 2


查看完整回答
反对 回复 2021-04-27
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信