import pandas as pd import numpy as np from scipy.optimize import curve_fit # 读取Excel文件 df = pd.read_excel('file.xlsx') # 定义多项式拟合函数 def poly_func(x, *coefficients): return sum([c * x ** i for i, c in enumerate(coefficients)]) # 存储拐点坐标的列表 turning_points = [] # 遍历每一行数据 for index, row in df.iterrows(): # 跳过空行 if pd.isnull(row).all(): continue # 获取当前行的数据 x = np.arange(len(row)) y = row.values # 进行多项式拟合 coefficients, _ = curve_fit(poly_func, x, y) # 寻找拐点 turning_point_indices = np.where(np.diff(np.sign(np.diff(y))) != 0)[0] + 1 turning_point_coordinates = [(x[i], y[i]) for i in turning_point_indices] # 添加到拐点列表 turning_points.append(turning_point_coordinates) # 创建新的DataFrame用于存储拐点坐标 new_df = pd.DataFrame(turning_points, columns=[f'拐点{i+1}坐标' for i in range(len(turning_points[0]))]) # 将结果保存到新的Excel文件 new_df.to_excel('拐点坐标.xlsx', index=False) 用Python写一段代码实现一下功能:对file.xlsx文件进行按行读取,自动跳过空行,对每行用六次多项式拟合,求出每行的拐点。将每行的拐点坐标存到新的Excel文件中
时间: 2024-04-07 08:30:08 浏览: 88
scikit-optimize:具有`scipy.optimize`接口的基于模型的顺序优化
以下是实现您要求的Python代码:
```python
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
# 读取Excel文件
df = pd.read_excel('file.xlsx')
# 定义多项式拟合函数
def poly_func(x, *coefficients):
return sum([c * x ** i for i, c in enumerate(coefficients)])
# 存储拐点坐标的列表
turning_points = []
# 遍历每一行数据
for index, row in df.iterrows():
# 跳过空行
if pd.isnull(row).all():
continue
# 获取当前行的数据
x = np.arange(len(row))
y = row.values
# 进行多项式拟合
coefficients, _ = curve_fit(poly_func, x, y)
# 寻找拐点
turning_point_indices = np.where(np.diff(np.sign(np.diff(y))) != 0)[0] + 1
turning_point_coordinates = [(x[i], y[i]) for i in turning_point_indices]
# 添加到拐点列表
turning_points.append(turning_point_coordinates)
# 创建新的DataFrame用于存储拐点坐标
new_df = pd.DataFrame(turning_points, columns=[f'拐点{i+1}坐标' for i in range(len(turning_points[0]))])
# 将结果保存到新的Excel文件
new_df.to_excel('拐点坐标.xlsx', index=False)
```
将上述代码保存为一个Python文件(例如`main.py`),并将`file.xlsx`放在同一目录下。运行代码后,会生成一个名为`拐点坐标.xlsx`的Excel文件,其中存储了每行数据的拐点坐标。
阅读全文