Необходимо заполнить следующую пустую ячейку в python pandas

#python #pandas #dataframe

#python #pandas #Фрейм данных

Вопрос:

Я создал новый фрейм данных:

 import pandas as pd
###creating a dataframe:
bb=pd.DataFrame(columns = ['INDate', 'INCOME', 'EXDate','EXPENSE'])
bb.to_excel('/py/deleteafter/bb_black_book.xlsx')
bb.head()
  

Я вижу новый фрейм данных без строк:

заголовки

Затем мне нужно добавить новое значение в один из столбцов по циклу.

 income_value=message.text ###It is depend from the user input
for i in range(len(bb)):
    print(bb['INCOME'][i])
    if bb['INCOME'][i] != 'NaN':
        i  = 1
       #print('NOT_EMPTY_CELL')
    else:
        #print('ive found an empty cell=)')
        bb['INCOME'][i]=income_value
        break
  

И здесь я столкнулся с ошибками, потому что мой df имеет длину 0:

 print(range(len(bb)))
range(0, 0)
  

Я не уверен, что мое решение правильное, и я уверен, что может быть более простое решение. В целом, моя основная идея такова:
Как я могу проверить следующую пустую ячейку в определенном столбце (в моем случае столбец 'INCOME' ), чтобы добавить значение в эту СВОБОДНУЮ ячейку?
Или проще — мне нужно добавить значение в следующую незаполненную ячейку =)

Буду рад вашим ответам.

Комментарии:

1. Вы можете попробовать сделать это bb['income'] = income_value для одного значения или bb['income'] = pd.Series(income_value) для списка значений.

Ответ №1:

Чтобы найти последнее допустимое значение, вы можете использовать last_valid_index(). Он выводит nan, когда фрейм данных пуст, поэтому вы могли бы сделать:

 idx = bb["INCOME"].last_valid_index())
import numpy as np
if np.isnan(idx) or idx is None:
    bb.loc[0, "INCOME"] = income_value
else:
    bb.loc[idx   1, "INCOME"] = income_value
  

Комментарии:

1. Но как я могу решить проблему, когда мой фрейм данных пуст? Если df пуст или первая строка содержит только значения NaN — ваш метод не сработал, потому что idx = None для значений в первой строке = (

2. Я добавил or idx is None к решению, поэтому теперь работает с None.

Ответ №2:

Существует гораздо более простой способ добавления строки, например:

 row = {'INCOME': 20000, 'EXdate': '14/09/2020'} 
df= df.append(pd.DataFrame(row))
  

Ответ №3:

Если вы хотите добавить данные только в один столбец, где номер индекса не существует, используйте loc

Изменить строку

 bb['INCOME'][i]=income_value
  

Для

 bb.loc[i,'INCOME']=income_value
  

и это должно работать нормально.