在数据框列表中添加数字

时间:2017-06-28 03:37:47

标签: python list dataframe

我有一个数据框。列 u4 之一是列表。如下所示:

enter image description here

列表列表中的数字是字符串类型。如何在列表中添加数字。

0    60
1    0
2    87.98
.
.
.

我尝试使用循环:

lists=[]
for row in activity_u_variables.u4:
    total=0
    for i in row:
        total+=i
    lists.append(total)

它给我一个错误消息,指出TypeError:+ =''int'和'str'

的不支持的操作数类型

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

DataFrame中存在0个,它们不属于列表。因此,for i in row:失败了。如果0是唯一不是列表形式的数字,您可以将其转换为[0]

另外,i就像你提到的那样是String。您必须将其显式转换为float才能使+操作正常工作。

因此,您的代码必须修改为:

lists=[]
for row in activity_u_variables.u4:
    total=0
    if row == 0:
        row = [0]
    for i in row:
        total+=float(i)
    lists.append(total)

答案 1 :(得分:0)

如果可能,您可以定义一个返回总和的函数,如果不是,则可以定义原始值。

def my_sum(x):
    try:
        return sum(x)
    except TypeError:
        return x

然后将此函数应用于列

sums = df['u4'].apply(my_sum)

如果列是列表的字符串表示,则可以执行类似

的操作
def my_sum(x):
    import ast

    if isinstance(x, str):
        x = ast.literal_eval(x)
    try:
        return sum(x)
    except TypeError:
        return x

答案 2 :(得分:0)

我刚想出另一种方法。我在这里发帖给你们参考。如果您需要对多个列执行此过程,此功能很有用。

# create a list_sum function 

def list_sum(s):
     return sum([float(i) for i in `s.split('|')])

# apply the function
activity_u_variables.u4.astype(str).apply(lambda x: list_sum(x))