Pandas DataFrame列拆分时列表推导式运行结果不符合预期问题求解
问题原因
- 核心错误是
zip()参数传参逻辑不符合预期:
你最初的代码给zip传入了和col_names长度相等的多个独立可迭代对象,zip会按位置配对不同可迭代对象的同位置元素,得到预期结果。修改后的代码直接把生成器表达式作为唯一参数传给zip,此时zip只接收到1个可迭代对象(就是这个生成器本身),会直接把生成器输出的每个列拆分结果单独打包成元组,而非跨列按位置配对元素。 - 额外语法问题:你的修改后代码末尾缺少对应
zip的右括号,运行会直接报语法错误。
修复方案
用*解包生成器表达式,把生成器输出的多个列拆分结果作为独立参数传给zip即可:
for i in range(len(df)): s = tuple(zip(*(df[col].str.split(",")[i] for col in col_names)))
优化建议
你当前逐行遍历DataFrame的写法效率较低,可提前完成整列拆分避免循环内重复计算:
# 提前完成所有目标列的拆分,避免循环内重复执行str.split split_res = [df[col].str.split(",") for col in col_names] for i in range(len(df)): s = tuple(zip(*[col_data[i] for col_data in split_res]))
内容的提问来源于stack exchange,提问作者user17475933
相关产品推荐
相关产品推荐

