问题描述
我正在学习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是其列之一。 该代码打算比较该列的两个连续值,并验证它们之间的数值差,并在给出语句的情况下打印温度。 我究竟做错了什么?
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)):
注意 :您提到比较连续的行,如果您不关心绝对值是增加还是减少,可以使用绝对值。
2楼
通常,您不应在Pandas中使用像这样的循环。 将代码向量化时,Pandas效果最好:
big_difference = (df1["Temperature"] - df1["Temperature"].shift(-1)) > 0.1
print(df1[big_difference]["Temperature"])