Удалить строку panda dataframe итеративно - PullRequest
0 голосов
/ 29 апреля 2020

Я знаю, что есть лучшие способы сделать это, но я собираюсь использовать pandas фрейм данных, используя iterrows, чтобы вычислить среднее значение в двоичном виде и удалить строки на каждой итерации. Я беру количество строк, которые я удаляю, из числа данных в корзине. Я делаю это вместо того, чтобы создавать постоянное количество бинов за раз, а затем вычисляю среднее бин, потому что мне нужно убедиться, что бины не перекрываются. Я делал это раньше, и у меня была эта проблема. Часть кода ниже - это то, что я сейчас использую. Это работает для первой итерации, но после этого я получаю сообщение о том, что eval() не может оценить df_name: eval() arg 1 must be a string, bytes or code object

  for df_name in alldfs:        
      for row,index in eval(df_name).iterrows():   
           ranges=np.arange(eval(df_name).A.min()-0.1 , eval(df_name).A.max() + 0.1, 0.1)  
           groups = eval(df_name).groupby(pd.cut(eval(df_name).mass, ranges,include_lowest=True))
           df_bin=pd.DataFrame(groups.mean())
           df_bin['binned']=eval(df_name).groupby(pd.cut(eval(df_name).mass, ranges, include_lowest=True)).size()
           number_bin=np.array(df_bin['binned'])[0]   
           df_name=eval(df_name).drop(eval(df_name).index[0:number_bin])

1 Ответ

0 голосов
/ 29 апреля 2020

Аргументы eval() должны быть строкой.

Попробуйте исправить в этой форме:

eval('df_name')

Обратите внимание, что я использовал имя фрейма данных в качестве строки, чтобы eval интерпретирует строку и читает ее как python код.

...