我有一个数据框。列 u4 之一是列表。如下所示:
列表列表中的数字是字符串类型。如何在列表中添加数字。
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'
的不支持的操作数类型有什么想法吗?
答案 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))