当前位置: 代码迷 >> python >> 循环结构和熊猫
  详细解决方案

循环结构和熊猫

热度:25   发布时间:2023-06-19 09:09:10.0

我正在学习python以及它的熊猫和一些有关数据科学的工具。 做一本书的练习时,我在IPython上编写了以上代码,但是执行该块时收到一条错误消息:

for i in range(len(df1)):
    if (df1['Temperature'][i]-df1['Temperature'][i-1]) > 0.1:
        print (df1['Temperature'][i])

追溯(最近一次通话):

File "<ipython-input-140-9f31dd23b324>", line 2, in <module>
    if (df1['Temperature'][i]-df1['Temperature'][i-1]) > 0.1:

  File "D:\Programas\Anaconda\lib\site-packages\pandas\core\series.py", line 766, in __getitem__
    result = self.index.get_value(self, key)

  File "D:\Programas\Anaconda\lib\site-packages\pandas\core\indexes\base.py", line 3103, in get_value
    tz=getattr(series.dtype, 'tz', None))

  File "pandas\_libs\index.pyx", line 106, in pandas._libs.index.IndexEngine.get_value

  File "pandas\_libs\index.pyx", line 114, in pandas._libs.index.IndexEngine.get_value

  File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc

  File "pandas\_libs\hashtable_class_helper.pxi", line 958, in pandas._libs.hashtable.Int64HashTable.get_item

  File "pandas\_libs\hashtable_class_helper.pxi", line 964, in pandas._libs.hashtable.Int64HashTable.get_item

KeyError: -1

其中df1 ['Temperature']是一个数据帧,因此Temperature是其列之一。 该代码打算比较该列的两个连续值,并验证它们之间的数值差,并在给出语句的情况下打印温度。 我究竟做错了什么?

在下面的语句中:

if (df1['Temperature'][i]-df1['Temperature'][i-1]) > 0.1:

i为0时,在df1['Temperature'][i-1]中, i-1的值变为-1索引,这是试图告诉您的错误消息。 一种方法可能是更改范围,以使i1开始,因为无论如何它都会寻找i-1因此它可能不会跳过0索引。 你可以试试:

for i in range(1, len(df1)):

注意 :您提到比较连续的行,如果您不关心绝对值是增加还是减少,可以使用绝对值。

通常,您不应在Pandas中使用像这样的循环。 将代码向量化时,Pandas效果最好:

big_difference = (df1["Temperature"] - df1["Temperature"].shift(-1)) > 0.1
print(df1[big_difference]["Temperature"])
  相关解决方案