如何让Pandas列拼接程序正常运行?需输出拼接后的整数
解决Pandas拼接两列为整数的问题
你的代码跑不起来的核心原因是:当使用apply(axis=1)时,传入lambda函数的是整行的Series对象,而不是你定义的两个独立参数x和y,这就导致了参数不匹配的错误。下面给你几种可行的修改方案:
方案一:修改lambda函数适配行对象
直接让lambda接收行数据,提取对应列的值后拼接转成整数:
import pandas as pd d = pd.DataFrame({'A': range(5), 'B': range(5, 10)}) # 接收行对象,提取A、B列拼接后转整数 f = lambda row: int(str(row['A']) + str(row['B'])) # 生成新列存储结果 d['combined'] = d.apply(f, axis=1)
方案二:矢量化操作(推荐)
Pandas的矢量化操作比逐行apply效率高得多,尤其处理大数据量时更明显。直接对列做字符串拼接再转整数:
import pandas as pd d = pd.DataFrame({'A': range(5), 'B': range(5, 10)}) # 将A、B列转字符串后拼接,再转回整数 d['combined'] = (d['A'].astype(str) + d['B'].astype(str)).astype(int)
方案三:用f-string简化拼接逻辑
如果喜欢f-string的写法,也可以用apply结合f-string实现:
import pandas as pd d = pd.DataFrame({'A': range(5), 'B': range(5, 10)}) d['combined'] = d.apply(lambda row: int(f"{row['A']}{row['B']}"), axis=1)
为什么原代码不行?
再强调一下:d[['A', 'B']].apply(f, axis=1)会把每一行的A、B值打包成一个Series传给f,但你的f定义需要两个参数,所以会抛出TypeError。如果非要保留f的双参数形式,也可以嵌套一层lambda,但这种写法没必要,反而冗余:
# 不推荐,仅作演示 f = lambda x, y: int(str(x) + str(y)) d['combined'] = d.apply(lambda row: f(row['A'], row['B']), axis=1)
内容的提问来源于stack exchange,提问作者r.user.05apr
相关产品推荐
相关产品推荐

