循环结构和熊猫

时间:2018-09-16 19:49:22

标签: python pandas

我正在学习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是其列之一。该代码打算比较该列的两个连续值,并验证它们之间的数值差,并在给出语句的情况下打印温度。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

在下面的声明中:

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)):

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

答案 1 :(得分:1)

通常,您不应使用类似Pandas中的循环。将代码矢量化后,Pandas效果最好:

big_difference = (df1["Temperature"] - df1["Temperature"].shift(-1)) > 0.1
print(df1[big_difference]["Temperature"])