执行K-means Clustering前数据索引分配遇TypeError,求修复方案
问题分析与解决
错误原因
cursor.fetchall()默认返回元组列表,你试图用字符串索引访问元组,直接触发TypeError。- 你错误地将
.split()写在了键名里,这是语法错误——应该先获取字段值,再对值调用split()方法。 - 代码里
co未初始化就累加,还有未使用的ro变量,属于冗余代码。
修复方案
方案1:用元组位置索引访问字段
因为SQL查询的第一个字段是CPC-Current-DWPI,所以用j[0]获取该字段值,再做分割处理:
with connection: with connection.cursor() as cursor: sql = """ SELECT `CPC-Current-DWPI`,`Assignee/Applicant First` FROM final.f01l_patent; """ cursor.execute(sql) result = cursor.fetchall() count = [] # 遍历1-9的目标值 for i in range(1, 10): co = 0 # 每次循环初始化计数器 for j in result : # 获取CPC字段值并分割 cpc_parts = j[0].split() # 先判断列表长度,避免索引越界 if len(cpc_parts) > 3 and cpc_parts[3] == str(i): co += 1 count.append(co)
方案2:改用字典游标(更直观)
让游标返回字典列表,这样可以直接用字段名访问值,代码可读性更高:
with connection: # 创建字典游标,返回结果为字典列表 with connection.cursor(dictionary=True) as cursor: sql = """ SELECT `CPC-Current-DWPI`,`Assignee/Applicant First` FROM final.f01l_patent; """ cursor.execute(sql) result = cursor.fetchall() count = [] for i in range(1, 10): co = 0 for j in result : # 直接用字段名获取值 cpc_value = j['CPC-Current-DWPI'] cpc_parts = cpc_value.split() if len(cpc_parts) > 3 and cpc_parts[3] == str(i): co += 1 count.append(co)
额外提示
- 注意
split()分割后的列表索引是从0开始的,cpc_parts[3]对应分割后的第4个元素,确认这是你需要的位置。 - 增加
len(cpc_parts) > 3的判断,避免部分CPC字段值过短导致的索引越界错误。
内容的提问来源于stack exchange,提问作者Dice Highe
相关产品推荐
相关产品推荐

