Pandas DataFrame中用双层for循环列表推导式创建新列报错解决
问题解决:基于Pandas两列创建新列
错误原因
你写的列表推导式用了两层嵌套循环,会遍历col1的每个元素和col2的每个元素的所有组合(4×4=16个结果),但DataFrame只有4行,因此出现长度不匹配的错误。
解决方案
方法1:使用zip同步遍历对应行元素
修改列表推导式,用zip同时取col1和col2的对应行元素,生成的结果长度会和DataFrame行数一致:
import pandas as pd df = pd.DataFrame({'col1': ['aaaa', 'aabb', 'bbcc', 'ccdd'], 'col2': ['ab12', 'cd15', 'kf25', 'zx78']}) df['col3'] = [x[:2] + '-' + y[2:] for x, y in zip(df['col1'], df['col2'])] print(df)
方法2:Pandas矢量化字符串操作(推荐)
用Pandas的str方法直接对整列进行切片拼接,效率更高,适合处理大数据量:
import pandas as pd df = pd.DataFrame({'col1': ['aaaa', 'aabb', 'bbcc', 'ccdd'], 'col2': ['ab12', 'cd15', 'kf25', 'zx78']}) df['col3'] = df['col1'].str[:2] + '-' + df['col2'].str[2:] print(df)
运行结果
两种方法都会得到预期输出:
col1 col2 col3 0 aaaa ab12 aa-12 1 aabb cd15 aa-15 2 bbcc kf25 bb-25 3 ccdd zx78 cc-78
内容的提问来源于stack exchange,提问作者Khaled DELLAL
相关产品推荐
相关产品推荐

