使用dfply提取split后列表元素触发ValueError问题求助
解决dfply中提取str.split结果第一个元素的报错问题
错误原因
你触发ValueError的核心问题是:X.Date.str.split(" ")返回的是Series对象(每个元素是对应行分割后的列表),直接加[0]会取出整个Series的第一个元素(也就是第一行分割后的列表,长度为2),然后试图把这个长度为2的列表作为新列值,和原DataFrame的279999行不匹配,因此报错。
两种正确写法
写法1:用str访问器取每个列表的第一个元素
from dfply import * import pandas as pd # 读取数据(也可直接从链接读取) df = pd.read_csv("LaptopSales.csv") (df >> select(X["Date"]) >> mutate(AdjDate = X.Date.str.split(" ").str[0]) >> head(3))
这里str.split(" ").str[0]是对Series中的每一个列表元素,单独取其索引为0的项,返回的是和原Series长度一致的结果,不会出现行数不匹配问题。
写法2:用expand=True拆分后直接选列
from dfply import * import pandas as pd df = pd.read_csv("LaptopSales.csv") (df >> select(X["Date"]) >> mutate(AdjDate = X.Date.str.split(" ", expand=True)[0]) >> head(3))
expand=True会把每行的分割结果展开成多列的DataFrame,之后[0]直接选取第一列,同样能得到每行分割后的第一个元素。
内容的提问来源于stack exchange,提问作者nicomp
相关产品推荐
相关产品推荐

