Pandas中apply()内使用split()的expand参数报错及相关技术疑问
Pandas 列拆分相关问题解答
问题1:修改代码为.apply(lambda x: str(x).split("," , expand=True))时报错“expand is invalid argument to split function”,原因是什么?
你混淆了两个不同的split方法:
- 这里的
str(x).split()是Python原生字符串的内置方法,它仅支持sep(分隔符)和maxsplit(最大拆分次数)两个参数,不存在expand这个参数; expand是Pandas专属的Series.str.split()方法的参数,用于控制是否将拆分结果展开为DataFrame。
把Pandas方法的参数套用到Python原生字符串方法上,必然会触发参数不存在的报错。
问题2:明明str.split()的默认返回值是Series,为何必须使用pd.Series()进行转换?
这是一个误解:str.split()(Python原生字符串方法)返回的是Python列表,而非Series。
如果在apply中直接返回列表,最终得到的是一个元素为列表的Series,无法直接赋值给DataFrame的多列。用pd.Series()将列表转换为Series后,apply会自动把这些行级的Series拼接成一个DataFrame,才能和df[['First Name', 'Last Name']]的多列结构匹配。
问题3:pd.Series()本身返回Series,为何在此处赋值后得到的是DataFrame?
当对Series调用apply,且每个元素的处理结果返回一个Series时,Pandas会自动将这些单个的Series按行堆叠组合,最终生成一个DataFrame。
简单来说:每个lambda x返回的是包含两个元素的Series(对应一行的两个拆分结果),所有行的Series拼接后就形成了有两列的DataFrame,刚好能赋值给你指定的两个列。
内容的提问来源于stack exchange,提问作者White_Dragon 1998
相关产品推荐
相关产品推荐

