result = [] for s_li in data.columns: ## 打印列名 print(s_li) if '方药' in str(s_li) : result.append(data[s_li]) print(result) #pd.DataFrame(result).to_excel(r'F:\python_project\result.xls') # 保存的路径 data2 = pd.read_excel(file2, sheet_name=0, keep_default_na=False) sheet = data['方药'] for k in range(row_num): cell1_data = sheet.iloc[k] # 获取单元格的值 cell1_data = str(cell1_data) if cell1_data not in data2: print( k, cell1_data)
时间: 2024-02-14 09:30:38 浏览: 19
根据您提供的代码,我可以看到您正在处理`data`中的列和`data2`之间的比较。首先,您使用一个循环来遍历`data`的列名,并打印每个列名。然后,如果列名中包含字符串'方药',您将该列的数据添加到`result`列表中。
接下来,您使用`pd.read_excel()`函数从`file2`中读取数据,并将其存储在`data2`变量中。然后,您从名为'方药'的工作表中检索数据,并使用一个循环来遍历每一行。在循环内部,您获取每个单元格的值,并将其转换为字符串类型。然后,您检查该值是否不存在于`data2`中,如果是,则打印出行号和单元格的值。
最后注释掉了保存结果到Excel文件的代码行,如果您想要保存结果到Excel文件,只需取消注释即可。
请记住,根据您的具体需求,您可能需要进一步处理或调整代码。
如果您有任何其他问题,请随时提问!
相关问题
优化代码df = df.iloc[:,:7].copy() for col_name in df.columns: # 取列名for col_name in X_copy.columns: col_data = df[[col_name]] # 根据列名拿列数据,两个方括号是因为要二维数组 stand_data = StandardScaler().fit_transform(col_data.values) # 标准化 df[col_name] = stand_data # 将数据替换成标准化后的数据 return X_copy def run_classifier(): # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test, random_state=random) # 训练分类器 knn.fit(X_train, y_train) # 在训练集上计算分类器的准确率 score = knn.score(X_train, y_train) # 更新结果标签的文本 result_label5.config(text="训练集分类器的准确率为:{:.2f}".format(score))
这段代码中进行了一些优化,将标准化处理的部分提取出来作为一个单独的函数,并将其返回值赋给X_copy。另外,X_copy是通过df.iloc[:,:7].copy()得到的,因此不再需要在for循环中遍历X_copy.columns。最后,将优化后的X_copy作为训练集和测试集进行划分。整个优化后的代码如下:
```
def standardize_data(df):
df = df.iloc[:,:7].copy()
for col_name in df.columns:
col_data = df[[col_name]]
stand_data = StandardScaler().fit_transform(col_data.values)
df[col_name] = stand_data
return df
def run_classifier():
# 对数据进行标准化处理
X_copy = standardize_data(X)
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_copy, y, test_size=test, random_state=random)
# 训练分类器
knn.fit(X_train, y_train)
# 在训练集上计算分类器的准确率
score = knn.score(X_train, y_train)
# 更新结果标签的文本
result_label5.config(text="训练集分类器的准确率为:{:.2f}".format(score))
```
这样做的好处是代码更加清晰,易于理解和维护。
将两段代码合成一个完整的df = df.iloc[:,:7].copy() for col_name in df.columns: # 取列名for col_name in X_copy.columns: col_data = df[[col_name]] # 根据列名拿列数据,两个方括号是因为要二维数组 stand_data = StandardScaler().fit_transform(col_data.values) # 标准化 df[col_name] = stand_data # 将数据替换成标准化后的数据 return X_copy def run_classifier(): # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test, random_state=random) # 训练分类器 knn.fit(X_train, y_train) # 在训练集上计算分类器的准确率 score = knn.score(X_train, y_train) # 更新结果标签的文本 result_label5.config(text="训练集分类器的准确率为:{:.2f}".format(score))
这段代码可以合并成一个完整的代码如下:
```
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 加载数据集
data = pd.read_csv("data.csv")
# 获取特征和标签
X = data.iloc[:,:7]
y = data.iloc[:,7]
# 对数据进行标准化处理
def standardize_data(df):
df = df.iloc[:,:7].copy()
for col_name in df.columns:
col_data = df[[col_name]]
stand_data = StandardScaler().fit_transform(col_data.values)
df[col_name] = stand_data
return df
# 将数据集分为训练集和测试集
X_copy = standardize_data(X)
X_train, X_test, y_train, y_test = train_test_split(X_copy, y, test_size=test, random_state=random)
# 训练KNN分类器
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
# 在训练集上计算分类器的准确率
score = knn.score(X_train, y_train)
# 更新结果标签的文本
result_label5.config(text="训练集分类器的准确率为:{:.2f}".format(score))
```
这段代码加载数据集,获取特征和标签,对数据进行标准化处理,将数据集分为训练集和测试集,训练KNN分类器,并在训练集上计算分类器的准确率。