Можно ли вставить строку в произвольное положение в фреймворке данных с помощью pandas?
У меня есть объект DataFrame, похожий на этот:
onset length
1 2.215 1.3
2 23.107 1.3
3 41.815 1.3
4 61.606 1.3
...
Я хотел бы добавить строку в позицию, указанную некоторым значением индекса, и соответственно обновить следующие индексы. Например:.
onset length
1 2.215 1.3
2 23.107 1.3
3 30.000 1.3 # new row
4 41.815 1.3
5 61.606 1.3
...
Каким будет лучший способ сделать это?
Ответы
Ответ 1
Вы можете нарезать и использовать concat, чтобы получить то, что вы хотите.
line = DataFrame({"onset": 30.0, "length": 1.3}, index=[3])
df2 = concat([df.iloc[:2], line, df.iloc[3:]]).reset_index(drop=True)
Это создаст кадр данных в вашем примере вывода. Насколько мне известно, concat - лучший метод для выполнения операции вставки в pandas, но по общему признанию, я ни в коем случае не эксперт pandas.
Ответ 2
Я нахожу это более читабельным, чтобы сортировать, а не нарезать и объединять.
line = DataFrame({"onset": 30.0, "length": 1.3}, index=[2.5])
df = df.append(line, ignore_index=False)
df = df.sort_index().reset_index(drop=True)
Ответ 3
Используйте код ниже:
from numpy import nan as Nan
import pandas as pd
df1 = pd.DataFrame({'Column1': ['A0', 'total', 'A2', 'A3'],'Column2': ['B0', 'B1',
'B2', 'B3'],'Column3': ['C0', 'C1', 'C2', 'C3'],'Column4': ['D0', 'D1', 'D2',
'D3']},index=[0, 1, 2, 3])
for index, row in df1.iterrows():
if row["Column1"] == 'total':
df1 = pd.DataFrame(np.insert(df1.values, index+1, values=[" "] *
len(df1.columns), axis=0),columns = df1.columns)
print (df1)
Входные данные:
Column1 Column2 Column3 Column4
0 A0 B0 C0 D0
1 total B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
Выход:
Column1 Column2 Column3 Column4
0 A0 B0 C0 D0
1 total B1 C1 D1
2
3 A2 B2 C2 D2
4 A3 B3 C3 D3