Я учусь обрабатывать пропущенные значения в наборе данных.У меня есть таблица с ~ 1 миллион записей.Я пытаюсь справиться с небольшим количеством пропущенных значений.
Мои данные относятся к системе совместного использования велосипедов, а мои пропущенные значения относятся к начальной и конечной точкам.
Данные: пропущенные стартовые станции,только 7 значений
![enter image description here](https://i.stack.imgur.com/uAug3.png)
Данные: отсутствует конечная станция, всего 24 значения
![enter image description here](https://i.stack.imgur.com/bbdxE.png)
Я хочу заполнить NaN
в обоих случаях режимом "противоположной" станции.Например, для start_station==21
я хочу посмотреть, что является наиболее распространенным end_station
, и использовать его для заполнения пропущенного значения.Например, df.loc[df['start_station'] == 21].end_station.mode()
Я пытался добиться этого с помощью функции:
def inpute_end_station(df):
for index, row in df.iterrows():
if pd.isnull(df.loc[index, 'end_station']):
start_st = df.loc[index, 'start_station']
mode = df.loc[df['start_station'] == start_st].end_station.mode()
df.loc[index, 'end_station'].fillna(mode, inplace=True)
Последняя строка выдает AttributeError: 'numpy.float64' object has no attribute 'fillna'
.Если вместо этого я просто использую df.loc[index, 'end_station'] = mode
, я получаю ValueError: Incompatible indexer with Series
.
Правильно ли я подхожу к этому?Я понимаю, что неправильно модифицировать то, что вы повторяете в пандах, так как правильно изменить столбцы start_station
и end_station
и заменить NaN
на соответствующий режим дополнительной станции?