Петлевые структуры и панды - PullRequest
0 голосов
/ 16 сентября 2018

Я изучаю Python, а также панды и некоторые инструменты для Data Science. Выполняя упражнения из книги, я написал приведенный выше код на IPython, но при выполнении блока я получаю сообщение об ошибке:

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

Traceback (последний последний вызов):

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'] - это фрейм данных, в котором температура является одним из его столбцов. Код, предназначенный для сравнения двух последовательных значений этого столбца, проверки числовой разницы между ними и вывода температуры с учетом оператора. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Как правило, вы не должны использовать такие петли в Пандах. Панды лучше всего работают, когда ваш код векторизован:

big_difference = (df1["Temperature"] - df1["Temperature"].shift(-1)) > 0.1
print(df1[big_difference]["Temperature"])
0 голосов
/ 16 сентября 2018

В заявлении ниже:

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

Примечание : вы упомянули сравнение последовательных строк, возможно, вы можете использовать абсолютное значение, если вам не важно, увеличивается оно или уменьшается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...