如何将字符串从列表转换为整数,然后减去?

时间:2019-01-03 22:46:27

标签: python pandas list data-manipulation

我想从列表数组中减去在每个字符串值中找到的两个数字,并将其转换为整数。

当前df:

                     pbp
0   ['0-0', '0-2', '0-4']
1   ['0-0', '2-0', '4-2']
2   ['0-0', '0-1', '0-2']

预期df:

            pbp
0   [0, -2, -4]
1   [0, 2, 2]
2   [0, -1, -2]

尝试: df[['pbp']].applymap(lambda x: x.strip()).applymap(ast.literal_eval)

               pbp
0   [0-0, 0-2, 0-4]
1   [0-0, 2-0, 4-2]
2   [0-0, 0-1, 0-2]

我只是不知道如何减去它们

2 个答案:

答案 0 :(得分:1)

这是一种快速而幼稚的方式来实现您想要的目标:

def subtract_list(my_list):
    result=[]
    for val in my_list:
        numbers = val.split('-')
        res = int(numbers[0] )- int(numbers[1])
        result.append(res)
    print(result)
    return result

调用该方法将返回:

subtract_list(['0-0', '0-2', '0-4'])

[0,-2,-4]

答案 1 :(得分:0)

尽管未在问题中说明,但该答案可以使用patternre.split涵盖多个数学运算。

import re

def compute(data):
    output = []
    for entry in data:
        equation = re.split('([\/|\-|\+|\*\*|\*|%])', entry)

        result = {
           '*' : lambda e: int(e[0]) * int(e[2]),
           '+' : lambda e: int(e[0]) + int(e[2]),
           '-' : lambda e: int(e[0]) - int(e[2]),
           '\/': lambda e: int(e[0]) / int(e[2]),
           '%' : lambda e: int(e[0]) % int(e[2]),
        }[equation[1]](equation)

        output.append(result)
    return output