我有一些列是像这样的值2/300/3
,但我想要一些这个值,在本例中是2+300+3=305
。为了实现这个目标,我使用命令
for i in range(len(df.col)):
df.col.iloc[i]=sum([float(j) for j in df.col.iloc[i].split("|")])
这个数据帧的长度很大,这就是为什么上面的命令非常耗时。有没有其他方法可以在没有循环的情况下完成相同的操作?注意:"/"不是固定的,在某些情况下它不存在
replace
和eval
可以完成的工作
import pandas as pd
data = ["2/300/3" , "5/300/3" , "3 50 3"]
df =pd.DataFrame(data, columns=["data"])
df["total_sum"] = df["data"].str.replace('[/ |" "]','+').apply(pd.eval)
输出:
data total_sum
0 2/300/3 305
1 5/300/3 308
2 3 50 3 56
您还可以使用str.split并应用
import pandas as pd
data = ["2/300/3" , "5/300/3" , "3/50/3"]
df =pd.DataFrame(data, columns=["data"])
df.data = df.data.str.split('/').apply(lambda x: sum(map(int,x)))