Вы переписываете строку 2:
def testAddColAndDelRow():
#experiment in this line: df=df.copy(), df=df.iloc[:2,:2], df.iloc[:2,:2].copy(), nothing, ...
df['newCol']=11
df.drop(df[df['start'] == '1'].index, inplace=True)
print(df)
print('-'*20)
print('length of df: ',len(df))
print('-'*20)
data_add = ['t', 's', 'q', 'p']
df.loc[len(df)] = data_add
return df
testAddColAndDelRow()
print('df',df,sep='\n',end='\n\n')
start middle finish newCol
1 e f g 11
2 a b c 11
--------------------
length of df: 2
--------------------
df
start middle finish newCol
1 e f g 11
2 t s q p
Ваше решение может быть использовано DataFrame.reset_index
:
def testAddColAndDelRow():
#experiment in this line: df=df.copy(), df=df.iloc[:2,:2], df.iloc[:2,:2].copy(), nothing, ...
df['newCol']=11
df.drop(df[df['start'] == '1'].index, inplace=True)
df.reset_index(drop=True,inplace=True)
data_add = ['t', 's', 'q', 'p']
df.loc[len(df)] = data_add
return df
testAddColAndDelRow()
print('df',df,sep='\n',end='\n\n')
start
start middle finish
0 1 2 3
1 e f g
2 a b c
df
start middle finish newCol
0 e f g 11
1 a b c 11
2 t s q p
Я рекомендуюдобавление последней строки перед отсутствием проблем с индексом и использование Boolean indexing
для удаления строк, где start == 1 или '1'
df['new_col']=11
df.loc[len(df)]=['t','s','q','p']
df=df.loc[df.start.ne('1')]
print(df)
start middle finish new_col
1 e f g 11
2 a b c 11
3 t s q p