Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 应用Lambda对数字重新编码(棘手的)字符串_String_List_Python 3.x_Lambda - Fatal编程技术网

String 应用Lambda对数字重新编码(棘手的)字符串

String 应用Lambda对数字重新编码(棘手的)字符串,string,list,python-3.x,lambda,String,List,Python 3.x,Lambda,我有一个NFL场景的大数据集,但为了说明,让我把它简化为两个观察结果的列表。像这样: data = [[scenario1],[scenario2]] 以下是数据集的组成部分: data[0][0] >>"It is second down and 3. The ball is on your opponent's 5 yardline. There is 3 seconds left in the fourth quarter. You are down by 3 points.

我有一个NFL场景的大数据集,但为了说明,让我把它简化为两个观察结果的列表。像这样:

data = [[scenario1],[scenario2]]
以下是数据集的组成部分:

data[0][0]
>>"It is second down and 3. The ball is on your opponent's 5 yardline. There is 3 seconds left in the fourth quarter. You are down by 3 points."

data[1][0]
>>"It is first down and 10. The ball is on your 20 yardline. There is 7 minutes left in the third quarter. You are down by 10 points."
我不能用这样的字符串格式构建任何模型。因此,我想将这些场景重新编码为新的列(或功能,如果您愿意),作为定量值。我想我应该先把数据框平方:

down = 0
yards = 0
yardline = 0
seconds = 0
quarter = 0
points = 0

data = [[scenario1, down, yards, yardline, seconds, quarter, points], [scenario2, yards, yardline, seconds, quarter, points]]
现在是棘手的部分,我必须从scenario列中的信息填充新列。棘手,因为例如,在第二句中,如果“对手的”一词出现,这意味着我们必须将其计算为100——不管码线数是多少。在上述
场景1
变量中,它应该是100-5=95

起初我认为我应该把所有的数字分开,扔掉单词,但正如上面指出的,一些单词实际上是正确分配数量值所必需的。我从来没有做过这么精细的兰姆达。或者,也许,一辆lambda不是正确的选择?我愿意接受任何/所有的建议

以下是我希望看到的内容(从
scenario1
如果我输入:

data[0][1:]
>>2,3,95,3,4,-3

谢谢

lambda不是您想要的方式。Python的
re
模块是您的朋友:)

就个人而言,我发现像
[[scenario,],…]
这样存储数据有点奇怪,但要将数据添加到每个场景中:

for s in data:
    s.extend(getScenarioData(s[0]))
我建议使用字典列表,因为使用像
data[0][3]
这样的索引可能会在一两个月后变得混乱:

def getScenarioData(scenario):
    # instead of data = []
    data = {'scenario':scenario}

    # instead of data.append(downs)
    data['downs'] = downs

    ...

scenarios = ['...', '...']
data = [getScenarioData(s) for s in scenarios]
编辑:当您想从DICT中获取值时,使用
get
方法防止引发
KeyError
,因为
get
默认为
None
如果找不到键:

for s in data:
    print(s.get('quarter'))

哇,那太有用了!!我将尝试不同的数据帧,看看哪一帧效果更好。我开始以你的方式看待DICT列表。很高兴我能帮上忙:)我确信它能工作,但我得到错误“NoneType”对象没有属性:group。查看数据后,我注意到一些场景非常简单,比如“你下降了3。你该怎么办?”我应该使用
试试
/
吗?或者是否有其他方法可以默认为0或na?我注意到你的一些代码有
如果
,也许我应该在所有的代码上加上标签?我不确定场景的语法有多严格,所以我让它很容易出错。我将编辑答案,以说明在每个
搜索中未找到匹配项。现在我看到了
搜索的威力。同样感谢
get
提示,它现在工作得非常好。你就是那个人!
for s in data:
    print(s.get('quarter'))