Помогите исправить ошибку в коде Python

введите сюда описание изображения

Здравствуйте, помогите пожалуйста с кодом. Вот у меня есть задание :

  1. Определить ОДЗ для своей функции.
  2. Создать DataFrame с двумя столбцами - первый вещественные числа из отрезка [a,b] с шагом h (отрезок берем из ОДЗ), второй столбец - значение функции y(x) в соответствующих точках.
  3. Вывести DataFrame на экран.
  4. Добавить строку со значениями точки x = b+1 и y = y(b+1).
  5. Удалить первую строку.
  6. Удалить строки, в которых значение x < b//2.
  7. Сохранить файл в формате csv.
  8. Построить средствами Python график своей функции на выбранном отрезке.

по нему я написал код, но у меня выходит ошибка:

"TypeError: 'float' object cannot be interpreted as an integer"

import pandas as pd
import numpy as np
a, b = 3, 30
h = 1
n = (b-a)/h + 1
 
# 2.
df = pd.DataFrame({'x':  np.linspace(a, b, n)})
df['y'] = np.log(df.x/(df.x-2))
 
# 3.
print(df)
 
# 4.
fun = lambda elem: [elem, np.log(elem/(elem-2))]
df.loc[n] = fun(b+1)
print(df)
 
# 5.
df.drop(index=0, inplace=True)
print(df)
 
# 6.
df = df[(df.x.values > b//2) | (df.x.values == b//2)]
print(df)
 
# 7.
df.to_csv('file.csv', index=False, delimiter=',')

В чем ошибка?


Ответы (2 шт):

Автор решения: CrazyElf

Число отрезков в np.linspace(a, b, n) должно быть целое, поэтому n должно быть целое, а не дробное, сделать это проще всего используя целочисленное деление //:

n = (b-a)//h + 1

Кроме того, у метода .to_csv нет параметра delimiter, а есть параметр sep:

df.to_csv('file.csv', index=False, sep=',')

И похвально, конечно, что вы знаете, как комбинировать условия в Pandas, но он вполне понимает >=, два условия не нужны, можно обойтись одним условием. Кроме того, .values использовать не нужно, при сравнении Series с числом Pandas и так понимает, что сравнивается values, а не index:

df = df[df.x >= b//2]

P.S. Отрисовка графика делается элементарно средствами самого Pandas:

df.plot(x='x', y='y');

введите сюда описание изображения

→ Ссылка
Автор решения: HellsCoder

Похоже, в коде, связанном с методом, произошла ошибка. Метод pandas DataFrame не имеет параметра с именем . Вместо этого он использует для указания разделителя для CSV-файла.

→ Ссылка