如何用pandas的assign()方法将单列拆分后批量赋值给多个新列
正确实现方法
你尝试的两种写法属于Python语法层面不支持的传参方式,assign方法仅支持接收新列名=值格式的关键字参数,无法直接通过多参数名、列表参数名的方式批量传列。
正确的批量赋值写法借助字典解包实现,示例如下:
import pandas as pd pets = pd.DataFrame({'observation': ['black,cat', 'brown,dog']}) # 写法1:用rename指定列名 ( pets .assign(**pets['observation'].str.split(',', expand=True).rename(columns={0:'colour', 1:'animal'})) .drop(columns='observation') ) # 写法2:用set_axis按顺序指定列名,适合拆分多列的场景 ( pets .assign(**pets['observation'].str.split(',', expand=True).set_axis(['colour', 'animal'], axis=1)) .drop(columns='observation') )
实现逻辑说明
str.split(expand=True)会返回和拆分结果列数一致的DataFrame,默认列名为0,1,...n- 用
rename或set_axis将返回的DataFrame列名修改为目标列名 - 用
**运算符将DataFrame解包为列名=列值的关键字参数传入assign,即可完成批量赋值 - 全程不会修改原始
pets数据,符合需求
内容的提问来源于stack exchange,提问作者dcurrie27
相关产品推荐
相关产品推荐

