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

我正在从数据访问时间戳。如果多个时间戳具有相同的值,则更改它们。在这种情况下,如果两个相同,则将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


湖上湖
浏览 180回答 1
1回答

紫衣仙女

通常,永远不要使用该for i in range(len(collection))构造来迭代Python中的集合,因为您可以简单地使用for item in collection。特别是在大熊猫中,您几乎不必迭代序列,如果这样做,则永远不要修改要迭代的对象。根据数据类型,迭代器可能会返回一个副本,对其进行写入将无效。相反,您应该选择对整个阵列进行操作。大熊猫重写代码的方法是dftime = df.timedftime[dftime == dftime.shift()] += 2dftime[dftime < dftime.shift()] += 2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python