如何在Python的DataFrame中实现两列列表元素求和而非拼接?
解决DataFrame列表元素数值求和问题
问题核心是:你拆分得到的列表元素仍然是字符串类型,所以+会执行字符串拼接而非数值求和。要实现数值相加,需要把列表里的元素转换为浮点型(float)。
修改方案一:转换列表时直接转数值类型
在拆分字符串生成列表的步骤中,同时将每个元素转为float,后续直接用数值运算即可:
import pandas as pd df = pd.read_csv('Example.csv') # 去除方括号并拆分,同时将每个元素转为float df["A_List"] = df["A_List"].apply(lambda x: [float(num) for num in x.strip("[]").split()]) df["B_List"] = df["B_List"].apply(lambda x: [float(num) for num in x.strip("[]").split()]) for i, row in df.iterrows(): print(row["A_List"][0] + row["B_List"][3])
修改方案二:求和时临时转换类型
如果不需要提前修改整个列表的元素类型,可以在求和操作时单独转换:
import pandas as pd df = pd.read_csv('Example.csv') # 去除方括号并拆分为字符串列表 df["A_List"] = df["A_List"].apply(lambda x: x.strip("[]").split()) df["B_List"] = df["B_List"].apply(lambda x: x.strip("[]").split()) for i, row in df.iterrows(): # 转换为float后再求和 print(float(row["A_List"][0]) + float(row["B_List"][3]))
两种方案都能得到你期望的0.16这类数值结果,推荐方案一,因为后续对列表元素的其他数值操作也能直接使用。
内容的提问来源于stack exchange,提问作者curd_C
相关产品推荐
相关产品推荐

