#python #pandas #dataframe #loops
#python #панды #фрейм данных #циклы
Вопрос:
Я использую Pandas для управления таблицей. Мне нужно заменить повторяющиеся поля ‘….’ на предыдущее значение
Код |
---|
Азбука |
…. |
…. |
…. |
123 |
…. |
…. |
…. |
Должно быть
Код |
---|
Азбука |
Азбука |
Азбука |
Азбука |
123 |
123 |
123 |
123 |
Я думаю, что это что-то вроде df[‘Code’] == df[‘Code’].shift().fillna(-1), но не могу понять, как это сделать строка за строкой (9000 строк)
Спасибо
Ответ №1:
Замените ....
на пропущенные значения NaN
s, а затем перенаправьте заполнение предыдущих отсутствующих значений:
df['Code'] = df['Code'].replace('....', np.nan).ffill()
Редактировать:
Значение пытается быть установлено на копии фрагмента из фрейма данных. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value
означает, что в некоторых строках раньше использовалась фильтрация, если вы измените значения df
позже, вы обнаружите, что изменения не распространяются обратно на исходные данные ( df1
), и что Pandas выдает предупреждение:
df = df1[df1['col'] == 1]
df['Code'] = df['Code'].replace('....', np.nan).ffill()
Решение заключается в использовании DataFrame.copy
:
df = df1[df1['col'] == 1].copy()
df['Code'] = df['Code'].replace('....', np.nan).ffill()
Комментарии:
1. Спасибо — однако он выдает ошибку, когда значение пытается быть установлено на копии фрагмента из фрейма данных. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value
2. Спасибо — отлично
Ответ №2:
Вы также можете попробовать это:
df['Code'].replace('....',method='ffill',inplace=True)
method
аргумент поможет вам выполнять свою работу вместо ffill()
отдельного вызова