2015-02-14 2 views
1

Я не имел никаких проблем вообще делает это:Передача диапазона на данных панд повышает KeyError

fun_abc(datax.time,datax.data,20) 

из которых Datax является pandas.DataFrame, в котором time и data являются столбцами.

Однако, когда я пытаюсь передать диапазон в функцию, я получаю KeyError: 0.

fun_abc(datax.time[100:120],datax.data[100:120],20) 

Я не мог обогнуть его. Не могли бы вы любезно помочь? Спасибо за внимание!

ответ

1

Когда вы делаете datax.time[100:120] вы больше не можете получить доступ индекс 0.

Например:

In [36]: import pandas as pd 

In [37]: import numpy as np 

In [38]: df = pd.DataFrame(np.arange(12).reshape(4,3)) 

In [39]: df[0][1:3] 
Out[39]: 
1 3 
2 6 
Name: 0, dtype: int64 

In [40]: df[0][1:3][0] 

Результаты в KeyError: 0

+0

Спасибо @Akavall! Я тоже понял это. Я приму свой ответ! Извините за неприятности! –

1

ГИЭ, я понял, что это неправильно.

Когда объект pandas.Series передается в функцию, он приносит с собой соответствующий ORIGINAL индекс. И здесь все идет не так.

Я пишу дополнительную процедуру проверки для устранения ошибки:

if isinstance(var_a, pd.Series): 
     var_a_ini = var_a.index[0] 
    else: 
     var_a_ini = var_a[0] 

Extra следует соблюдать осторожность в случае борьбы с pandas.Series, когда вы нарезанной частью его, чтобы передать в функцию, которая действует на основе ссылка на индекс.

Смежные вопросы