我几乎没有看到其他类似的问题报告,但我无法复制我的情况下的解决方案。
我的问题更简单,因为我有一个数字列表和一个字符串列表
number = [21, 44, 31, 553, 63, 35]
access = ["denied", "Try Again", "Retry", "Accepted", "Error", "Success"]
我压缩了它们并创建了一对,每个值如下
testInput = zip(number, access)
output:
[(21, 'denied'), (44, 'Try Again'), (31, 'Retry'), (553, 'Accepted'), (63, 'Error'), (35, 'Success')]
我试图遍历每一对并执行我的函数,该函数根据对的值将它们映射到一个团队名称。我的尝试是:
def mapping(number, access):
team = ''
checkNumberAndAccess = zip(number, access)
for number, access in checkNumberAndAccess:
if number in range(20,30):
team = 'Revolt'
elif (number in range(40,50)) and (access == 'Try Again'):
team = 'Strike'
elif (number in range(60,100)) and (access == 'Error'):
team = 'Exception'
print team
return team
我希望“Team”变量保存每对的映射输出值,因此这是我执行函数的地方:
for number, access in testInput:
Team = mapping(number, access)
df = df.append({'Access Message': access, 'Number': number}, ignore_index=True)
print df
在执行映射函数时,出现“TypeError:zip argument#1 must support iteration”错误。是不是放错地方了?
完整代码:
import pandas as pd
df = pd.DataFrame()
number = [21, 44, 31, 553, 63, 35]
access = ["denied", "Try Again", "Retry", "Accepted", "Error", "Success"]
def mapping(number, access):
team = ''
checkNumberAndAccess = zip(number, access)
for number, access in checkNumberAndAccess:
if number in range(20,30):
team = 'Revolt'
elif (number in range(40,50)) and (access == 'Try Again'):
team = 'Strike'
elif (number in range(60,100)) and (access == 'Error'):
team = 'Exception'
print team
return team
testInput = zip(number, access)
print testInput
for number, access in testInput:
Team = mapping(number, access)
df = df.append({'Access Message': access, 'Number': number}, ignore_index=True)
print df
熊猫解决方案呢?
在您的解决方案中,可以在循环中将输出附加到
list
,最后由构造函数创建DataFrame
:试试这个。
或者您可以从这里传递总列表并压缩到那里,处理并将最终结果返回给调用函数
相关问题 更多 >
编程相关推荐