Почему эта ячейка информационного кадра содержит не значение, а серию? - PullRequest
0 голосов
/ 08 февраля 2019

Я читаю в CSV для данных в Python.У меня есть DateTimeIndex и два интересующих меня столбца, давайте назовем их number и upper_limit.Я сортирую по индексу, удаляю ненужные столбцы и строки, принадлежащие старым временным меткам.Затем я вычисляю min, max и avg для обоих столбцов с помощью

numbercol = pd.to_numeric(df.iloc[:,0], errors='coerce')
upperlimitcol = pd.to_numeric(df.iloc[:,1], errors = 'coerce')

. Это прекрасно работает.Теперь я хочу проверить, как часто число больше, чем upper_limit, с помощью

for dt in df.index:
     if numbercol[dt] >= upperlimitcol[dt]:
         overshoots += 1

Но я получаю

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Я добавил оператор печати, чтобы увидеть значение столбца number и upper_limitдля каждого dt, и получается, что после 1800 строк значения в ячейках больше не являются числами, а выглядят так (это то, что мне дают для print(numbercol[dt]))

DateTime
2017-01-14       NaN
2017-01-14    3018.0
Name: Number, dtype: float64

Тип numbercol[dt] также изменяется с <type 'numpy.float64'> на <class 'pandas.core.series.Series'>

Я исследовал файл в текстовом редакторе, а также в Libre Office и Excel, но не увидел никакой разницы между этой строкой илиния до.У вас есть идеи, почему это может быть?

1 Ответ

0 голосов
/ 08 февраля 2019

Возвращается серия, потому что у вас есть две записи с одинаковым dt.Не зная контекста вашей проблемы, трудно сказать, как поступить.

Один из способов - объединить данные в цикле for с помощью sum() или какой-либо другой агрегирующей функции (например, max(),min() и т. Д.):

for dt in df.index:
   if numbercol[dt].sum() >= upperlimitcol[dt]:
       overshoots += 1

Другим может быть dropna () перед вашим циклом for.

...