首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python给大文件评分:`exec`的替代方案

如何使用python给大文件评分:`exec`的替代方案
EN

Stack Overflow用户
提问于 2013-05-23 06:15:48
回答 1查看 146关注 0票数 0

我想使用在R中构建的模型来给非常大的文件评分。

这个想法是从R模型对象中提取实际的预测方程,并定义一个包含该方程的python字符串。

大型预测器文件的预测器标题与用于构建模型的预测器名称相同(模型开发和模型评分预测器是使用相同的python代码生成的)。

我想用python给大的predictor文件打分(从而避免分割/分块predictor文件以允许R处理,即使Rpredict函数确实是一个有吸引力的替代方法)。

所以我查看了How do I execute a string containing Python code in Python?和其他帖子。由于evalexec在python社区中不受欢迎,我想知道将方程动态应用于存储在csv文件中的一组预测器的最具python风格的方法是什么。谢谢。

代码语言:javascript
运行
复制
import csv
import StringIO

predfile = StringIO.StringIO(
'''x1,x2
1,2
3,4''')

eq = '1 + 2*x1 + 3*x2'
reader = csv.reader( predfile , delimiter=',' )
header = reader.next()
for row in reader:
    exec("{0}={1}".format(header[0],row[0]))
    exec("{0}={1}".format(header[1],row[1]))
    exec("yhat={0}".format(eq))
    print yhat
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-23 07:20:41

为了扩展我的评论,这里有一个可能的解决方案,它可以将您的等式转换为一个函数,该函数接受以列标题命名的参数,然后从DictReader输入行

代码语言:javascript
运行
复制
import csv
import StringIO

predfile = StringIO.StringIO(
'''x1,x2
1,2
3,4''')

def func(x1, x2):
    x1 = int(x1)
    x2 = int(x2)
    return 1 + 2*x1 + 3*x2

reader = csv.DictReader( predfile , delimiter=',' ) # header is handled automatically
for row in reader:
    print func(**row)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16702506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档