ws_range = ws.iter_rows(min_row=1, max_row=3, min_col=1, max_col=6)
时间: 2023-06-20 21:04:54 浏览: 379
这行代码是使用 openpyxl 模块中的 iter_rows() 方法来获取 Excel 表格中指定行列范围的单元格对象。其中,min_row 和 max_row 参数指定行的起始和结束位置,min_col 和 max_col 参数指定列的起始和结束位置。这里的代码获取了第 1 行至第 3 行,第 1 列至第 6 列的所有单元格对象,并将它们存储在 ws_range 中,可以通过遍历 ws_range 来操作这些单元格对象。
相关问题
import openpyxl import pandas wb = openpyxl.load_workbook('./22自动化3花名册.xlsx') ws = wb['Sheet1'] k = 24 ord_num = [] name = [] number = [] def exchange(tabs): poped_names=tabs.pop(k) tabs.insert(1,poped_names) return tabs for row in ws.iter_rows(min_row = 1, min_col = 1, max_row = 31, max_col = 3): ord_num.append(row[0].value) name.append(row[1].value) number.append(row[2].value) ord_num = exchange(ord_num) name = exchange(name) number = exchange(number) del name[0] del ord_num[0] del number[0] for i in range(30): print(ord_num[i],name[i],number[i]) import pandas as pd dataframe = pd.DataFrame({'序号':ord_num,'姓名':name,'学号':number}) dataframe.to_csv("names.csv",index=False,sep=',') 要求修改代码,以不同的方式成功输入两位同学的信息后成功输出
好的,我来帮你修改代码。首先,你需要让用户输入两位同学的姓名和学号,可以使用 Python 内置的 `input()` 方法来实现。请将代码替换为以下内容:
```
import openpyxl
import pandas as pd
wb = openpyxl.load_workbook('./22自动化3花名册.xlsx')
ws = wb['Sheet1']
k = 24
ord_num = []
name = []
number = []
def exchange(tabs):
poped_names = tabs.pop(k)
tabs.insert(1, poped_names)
return tabs
for row in ws.iter_rows(min_row=1, min_col=1, max_row=31, max_col=3):
ord_num.append(row[0].value)
name.append(row[1].value)
number.append(row[2].value)
ord_num = exchange(ord_num)
name = exchange(name)
number = exchange(number)
del name[0]
del ord_num[0]
del number[0]
for i in range(30):
print(ord_num[i], name[i], number[i])
# 获取两位同学的信息
name1 = input("请输入第一位同学的姓名:")
number1 = input("请输入第一位同学的学号:")
name2 = input("请输入第二位同学的姓名:")
number2 = input("请输入第二位同学的学号:")
# 将两位同学的信息添加到列表中
ord_num.append(ord_num[-1] + 1)
name.append(name1)
number.append(number1)
ord_num.append(ord_num[-1] + 1)
name.append(name2)
number.append(number2)
# 构造 DataFrame 并保存为 CSV 文件
dataframe = pd.DataFrame({'序号': ord_num, '姓名': name, '学号': number})
dataframe.to_csv("names.csv", index=False, sep=',')
```
这样,用户就可以输入两位同学的姓名和学号,程序会自动将这两位同学的信息添加到列表中,并保存为 CSV 文件。请注意,由于 `exchange()` 方法在列表中插入了一个元素,因此需要将 `ord_num`、`name` 和 `number` 列表的长度加 1,才能正确地添加两位同学的信息。
import pandas as pd import openpyxl # import matplotlib.pyplot as plt import numpy as np from sklearn.ensemble import AdaBoostClassifier from sklearn.model_selection import train_test_split # 打开Excel文件 wb = openpyxl.load_workbook('./处理过的训练集/987027.xlsx') # 选择需要读取的工作表 ws = wb['Sheet1'] # 读取第一列第二行之后的数据 data = [] for row in ws.iter_rows(min_row=2, min_col=1, values_only=True): data.append(row[0]) # 打印读取的数据 # print(data) # # 将浮点型数据按照等宽离散化的方法转化为离散型数据 # bin_edges = np.linspace(min(data), max(data), num=10) # discretized_data = np.digitize(data, bin_edges) # # 打印转化后的数据 # print(discretized_data) # 假设数据共有N个点,采样周期为0.25秒 N = len(data) t = np.arange(N) * 0.25 # labels2 = pd.cut(t, bins=10, labels=False) #组合时间序列和采样值 data1 = np.column_stack((t,data)) print(data1[:10]) # 打印前10行数据 # train_test_split函数用于将数据集划分为训练集和测试集,其中test_size参数指定了测试集所占的比例, # random_state参数指定了随机种子,以保证每次划分的结果相同。 X_train, X_test, y_train, y_test = train_test_split(data1[:, :-1], data1[:, -1], test_size=0.2, random_state=42) clf = AdaBoostClassifier(n_estimators=100, random_state=0) clf.fit(X_train, y_train) clf.predict([[0,0,0,0]]) clf.score(X_train, y_train)报错ValueError: X has 2 features, but AdaBoostClassifier is expecting 1 features as input.
根据代码中的错误提示,可以看出AdaBoostClassifier期望的特征数量为1,但是在训练和测试数据中,特征数量为2,这是导致报错的原因之一。另外,代码的最后一行clf.predict([[0,0,0,0]])也需要修改,因为数据集中的特征数量为2,而预测数据的特征数量为4,也是不匹配的。可以将预测数据的特征数量修改为2,如下所示:
```
import pandas as pd
import openpyxl
import numpy as np
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import train_test_split
# 打开Excel文件
wb = openpyxl.load_workbook('./处理过的训练集/987027.xlsx')
# 选择需要读取的工作表
ws = wb['Sheet1']
# 读取第一列第二行之后的数据
data = []
for row in ws.iter_rows(min_row=2, min_col=1, values_only=True):
data.append(row[0])
# 假设数据共有N个点,采样周期为0.25秒
N = len(data)
t = np.arange(N) * 0.25
# 组合时间序列和采样值
data1 = np.column_stack((t,data))
print(data1[:10])
# train_test_split函数用于将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data1[:, :-1], data1[:, -1], test_size=0.2, random_state=42)
# 修改AdaBoostClassifier期望的特征数量为1
clf = AdaBoostClassifier(n_estimators=100, random_state=0)
clf.fit(X_train, y_train)
clf.predict([[0,0]])
# 修改预测数据的特征数量为2
clf.score(X_train, y_train)
```
注意,上述修改只是解决了特征数量不匹配的问题,如果还有其他问题需要进一步调试。
阅读全文