#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
и это должно работать нормально.