Pandas拼接列表时PyCharm出现FutureWarning的问题
解决pandas中df.sum(axis=1)拼接行内列表的FutureWarning问题
警告原因
在pandas 1.5.0版本中,df.sum(axis=1)用于拼接行内的字符串列表属于非预期用法:sum方法的设计初衷是对数值类型进行求和运算,而非处理列表这类非数值类型的聚合。官方已明确会在未来版本中限制sum的适用场景,仅保留数值类型的求和功能,因此抛出FutureWarning提示开发者该操作后续可能失效或行为变更。
解决办法
以下几种替代方法可实现相同的行内列表拼接功能,且不会触发警告:
方法1:使用apply逐行处理
通过apply传入匿名函数,逐行拼接所有列的列表:
result = df.apply(lambda row: sum(row, []), axis=1)
这里sum(row, [])的作用是将行内的多个列表依次合并到空列表中,与原df.sum(axis=1)的效果完全一致。
方法2:使用agg指定聚合逻辑
与apply逻辑类似,通过agg方法实现行级聚合:
result = df.agg(lambda row: sum(row, []), axis=1)
方法3:列表推导式(小数据场景适用)
对于数据量较小的情况,可结合iterrows使用列表推导式:
import pandas as pd result = pd.Series([sum(row, []) for _, row in df.iterrows()])
注意:iterrows的遍历效率较低,不推荐用于大型DataFrame。
验证示例
假设你的DataFrame生成代码如下:
import pandas as pd data = { 'col1': [['a', 'b'], ['c'], [], ['d', 'e'], ['f']], 'col2': [['x'], ['y', 'z'], ['m'], [], ['n']], 'col3': [['p', 'q'], [], ['r', 's'], ['t'], []] } df = pd.DataFrame(data)
使用上述任一方法,都会得到与原df.sum(axis=1)完全相同的结果:
0 [a, b, x, p, q] 1 [c, y, z] 2 [m, r, s] 3 [d, e, t] 4 [f, n] dtype: object
内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows
相关产品推荐
相关产品推荐

