У меня есть фрейм данных pandas ниже
import pandas as pd
dat = pd.DataFrame({'A': [1,2,3,5], 'B': [7,6,7,8]})
Теперь у меня есть список
List = [99, 88]
Я хочу вставить этот список в строку номер 2.
Есть ли какой-либо метод для достижения этой цели? Я обнаружил, что есть метод insert
, однако он вставляет столбец только в назначенное место.
Вы можете использовать iloc и concat:
N = 2
List = [99, 88]
out = pd.concat([dat.iloc[:N],
pd.DataFrame([List], columns=dat.columns),
dat.iloc[N:]], ignore_index=True)
В качестве альтернативы, если у вас есть (отсортированный) индекс диапазона, вы можете вставить индекс непосредственно перед желаемой позицией (например, 1,5) и sort_index:
N = 2
dat.loc[N-0.5] = List
dat.sort_index(inplace=True, ignore_index=True)
Выход:
A B
0 1 7
1 2 6
2 99 88
3 3 7
4 5 8
Если вы хотите заменить существующие данные, просто назначьте:
dat.loc[2] = List
Выход:
A B
0 1 7
1 2 6
2 99 88
3 5 8
Чтобы выполнить это в pipe
, вам, вероятно, следует использовать специальную функцию:
def assign_chain(df, pos, obj):
df = df.copy()
df.loc[pos] = obj
return df
out = (pd.DataFrame({'A' : [1,2,3,5], 'B' : [7,6,7,8]})
.pipe(assign_chain, 2, List)
)
@Богасо, тогда просто dat.loc[2] = List
?
Отлично. Можно ли реализовать это с помощью правила цепочки, т. е. с помощью метода pipe
(или аналогичного)?
@Bogaso, тогда вам нужна специальная функция для копирования, см. обновление
Спасибо. Однако, когда происходит вставка в определенную строку, существующие значения этой строки должны быть удалены, чтобы новый
dat
имел такое же количество строк. Есть ли способ изменить это?