我正在学习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是其列之一。该代码打算比较该列的两个连续值,并验证它们之间的数值差,并在给出语句的情况下打印温度。我在做什么错了?
答案 0 :(得分:1)
在下面的声明中:
if (df1['Temperature'][i]-df1['Temperature'][i-1]) > 0.1:
当i
为0时,在df1['Temperature'][i-1]
中,i-1
的值将成为-1
索引,这是试图指出的错误消息。
一种方法可能是更改范围,以使i
从1
开始,因为无论如何它都会寻找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"])