python - + 不支持的操作数类型:'int' 和 'list' - python
问题描述
我在 csv 文件中有这样的数据:
F1,1,1,1,1,0,1,1,0,0,1
F2,1,0,0,0,0,0,1,0,1,1
F3,1,0,0,0,0,0,1,1,1,1
F4,1,0,0,0,0,0,1,1,1,0
F5,14,24,22,22,22,16,18,19,26,22
F6,8.0625,6.2,6.2609,6.6818,6.2174,6.3333,7.85,6.0833,6.9655,6.9167
F7,0,0,0,0,0,0,1,0,1,0
F8,1,0,2,0,0,0,2,0,0,0
F9,1,0,0,0,1,1,0,0,0,0
F10,8,4,3,3,3,6,8,5,8,4
F11,0,0,1,0,0,1,0,0,0,0
F12,1,0,0,0,1,0,1,1,1,1
我只想总结数字而不是字符串和我的代码,如下所示:
import csv
import math
import copy
class Pearsons:
def __init__(self,fiturs,docs):
self.fiturs = fiturs
self.docs = docs
def x_value(self):
sumx = []
for fitur in self.fiturs:
x = sum(([float(x)]) for x in fitur[1:])
sumx.append(x)
print sumx
def x_pow(self):
sumxp = []
for fitur in self.fiturs:
xval_pow = sum([float(x)**2 for x in fitur[1:]])
sumxp.append(xval_pow)
return sumxp
def y_value(self):
sumy = []
for dokumen in self.docs:
if dokumen[2] == "POSITIF":
sumy.append(1)
else:
sumy.append(0)
sigma_y = sum(sumy)
return sigma_y
def y_pow(self):
sumy = []
for dokumen in self.docs:
if dokumen[2] == 'POSITIF':
sumy.append(1)
else:
sumy.append(0)
ypow = []
for x in sumy:
ypow.append(x ** 2)
sigmapow = sum(ypow)
return sigmapow
def xy_val(self):
list_y = []
for dokumen in self.docs:
if dokumen[2] == 'POSITIF':
list_y.append(1)
else:
list_y.append(0)
# print list_y
sigmaxy = []
for xyfitur in self.fiturs:
xy = []
for i, x in enumerate(list_y):
xy.append(float(xyfitur[i]) * list_y[i])
sigmaxy.append(sum(xy))
return sigmaxy
def pearsons(self):
list_y = []
for dokumen in self.docs:
if dokumen[2] == 'POSITIF':
list_y.append(1)
else:
list_y.append(0)
# Assume len(x) == len(y)
n = len(list_y)
sigmax = self.x_value()
sigmay = self.y_value()
sigmaxpow = self.x_pow()
sigmaypow = self.y_pow()
sigmaxy = self.xy_val()
rpxy_list = []
for i, v in enumerate(sigmax):
rpxy_top = (n * sigmaxy[i]) - (sigmax[i] * sigmay)
rpxy_bot = math.sqrt((n * sigmaxpow[i]) - (sigmax[i] ** 2)) * math.sqrt((n * sigmaypow) - (sigmay ** 2))
if rpxy_bot == 0:
rpxy_list.append(0)
else:
rpxy_list.append(abs(rpxy_top / rpxy_bot))
#print rpxy_list
return rpxy_list
fiturs = []
docs = []
with open("features2.csv", "rb") as f:
fiturcsv = csv.reader(f, None)
fiturs = [x for x in fiturcsv]
fiturs.insert(0, fiturs[0])
with open("datalatih.csv", "rb") as f:
docscsv = csv.reader(f)
docs = [x for x in docscsv]
p = Pearsons(fiturs, docs)
# nb.BernoulliNaiveBayes()
p.x_value()
#p.xy_val()
它会导致以下错误:
C:/Users/USER/PycharmProjects/Skripsi/coba.py Traceback(最近一次调用最后):文件“C:/Users/USER/PycharmProjects/Skripsi/coba.py”,第 117 行,在 p.x_value() 文件中“C:/Users/USER/PycharmProjects/Skripsi/coba.py”,第 14 行,在 x_value x = sum(([float(x)]) for x in fitur[1:]) TypeError: unsupported operand type(s ) for +: 'int' 和 'list'
进程以退出代码 1 结束
解决方案
你有一个额外]
的代码
应该
def x_value(self):
sumx = []
for fitur in self.fiturs:
x = sum([float(x) for x in fitur[1:]])
sumx.append(x)
print sumx
改变让我
[7.0, 7.0, 4.0, 5.0, 4.0, 205.0, 67.5714, 2.0, 5.0, 3.0, 52.0, 2.0, 6.0]
推荐阅读
- java - 如何在按钮中显示进度百分比
- django - 使用 Django ORM 对 jsonb 字段进行计数聚合
- javascript - 点击速度的jQuery选择器类型
- reactjs - 如何添加多个链接材质文本字段
- azureservicebus - 可以使用 Azure 逻辑应用将 AMQP 消息发送到服务总线主题吗?
- javascript - 使用 JQuery 获取 div 内的时间数字
- scala - Akka 超时异常,但消息实际发送
- php - 我在程序 php 中使用 mysqli 语句.....数据类型不起作用
- javascript - 通过表单数据 axios 上传文件的问题
- vue.js - 我没有在标签标题中获得 vue-dropdown