Обновите фрейм данных с помощью цикла for - PullRequest
0 голосов
/ 23 сентября 2019

Код ниже должен обновить test_df dataframe, который в настоящее время заполнен NaN s.

Каждому значению «dig» (которое всегда является целым числом) соответствует «top», «bottom»Значения 'left' и 'right' и фрагменты кадра данных, соответствующие соответствующим диапазонам top: bottom, left: right для каждого 'dig', необходимо обновить значениями 'dig'.

Например, если dig = 9, top = 2, botton = 4, left = 1 и right = 5, все NaN s в диапазоне 2: 4, 1: 5 должны бытьзаменено на 9 с.

Следующий код не сообщает об ошибках, однако обновления NaN не обновляются.

for index, row in letters_df.iterrows():
    dig = str(row[0])
    top = int(height) - int(row[2])
    bottom = int(height) - int(row[4])
    left = int(row[1])
    right = int(row[3])
    test_df.iloc[top:bottom, left:right] = dig

test_df:

   0    1    2    3    4    5    6    ...  633  634  635  636  637  638  639
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN
4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  ...  NaN  NaN  NaN  NaN  NaN  NaN  NaN

letters_df:

   0    1    2    3    4  5  dig_unique_letters
0  T   36  364   51  388  0                   0
1  h   36  364   55  388  0                   1
2  i   57  364   71  388  0                   2
3  s   76  364   96  388  0                   3
4  i  109  364  112  388  0                   2

1 Ответ

0 голосов
/ 23 сентября 2019

Проблема, которую я вижу, состоит в том, что в letters_df значение в столбце 4 больше, чем значение в столбце 2. Это означает, что когда вы сделаете top = int(height) - int(row[2]) bottom = int(height) - int(row[4]), значение, которое вы получите в top, будет больше, чемзначение, которое вы получите в bottem.Поэтому, когда вы индексируете .iloc[top:bottom], у вас нет строк в срезе.Возможно, вам следует переключиться между top и bottem.

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