Присвойте значение через iloc в Pandas Data Frame - PullRequest
0 голосов
/ 08 октября 2019

Фрагмент кода:

    for row in df.itertuples():
        current_index = df.index.get_loc(row.Index)
        if current_index < max_index - 29:

            if df.iloc[current_index + 30].senkou_span_a == 0.0:
                df.iloc[current_index + 30].senkou_span_a = 6700


            if df.iloc[current_index + 30].senkou_span_b == 0.0:
                df.iloc[current_index + 30].senkou_span_b = 6700.0

последняя строка, в которой я присваиваю значение через iloc, проходит, но результирующее значение равно 0.0. Я сталкивался с этим раньше, когда назначал значение для копии df, но на этот раз это не так. Я смотрел на это весь день. Я надеюсь, что это просто что-то глупое.

df - финансовые данные временных рядов (DateTimeIndex). Я проверил, что правильный индекс существует, и никаких исключений не выдается.

Есть другой код для присвоения значений, и он работает просто отлично, пропустил этот код для краткости.

РЕДАКТИРОВАТЬ

Эта строка работает: df.iloc[current_index + 30, df.columns.get_loc('senkou_span_b')] = 6700

почему этот, а не оригинал?

1 Ответ

1 голос
/ 08 октября 2019

Я не совсем точно знаю, что вызывает вашу проблему (я довольно плохо знаком с Python), но вот некоторые вещи, которые могут прийти на ум, которые могут оказаться полезными:

  1. Предполагая, что значение, которое выВы всегда заменяете 0 или 0.0, возможно, попробуйте переключиться с = на + = для добавления вместо назначения?
  2. При попытке присвоить значение ваш фрейм данных находится в формате кортежа? Ваша проблема может заключаться в том, что кортежи являются неизменяемыми.
  3. Если senkou_span_a ссылается на столбец, который вы изолируете, возможно, попробуйте использовать iloc только для выделения значения, такого как df.iloc [(currentindex + 30), 1] == 0.0

Надеюсь, это помогло!

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