Pandas中如何提取apply函数返回列表的首个元素作为新列
问题原因
原来的代码报错的核心原因是:df['name'].apply(preprocess_names)返回的是Pandas Series对象,每个元素是长度为3的列表。此时直接加[0]是取该Series的第一行元素(即第一行对应的列表),而非取每个列表元素的第0位,赋值时会因为单行数据和整列长度不匹配触发ValueError。
正确实现方案
方案1:仅提取单个列
如果只需要提取列表的第0位生成新列,使用Pandas的.str索引器访问每个列表元素的对应位置即可:
df['runs'] = df['name'].apply(preprocess_names).str[0]
同理提取第1、2位的写法为.str[1]、.str[2]。
方案2:一次性生成3个新列(更高效)
如果需要把返回的3个元素一次性存入三个新列,无需重复调用apply三次,直接转换为DataFrame赋值即可:
# 可将col1、col2、col3替换为你需要的实际列名 df[['runs', 'col2', 'col3']] = pd.DataFrame(df['name'].apply(preprocess_names).tolist(), index=df.index)
额外注意
你提供的preprocess_names函数中name.split('')写法在Python中会直接报错,split的分隔符不能是空字符串。如果需要把字符串按单个字符拆分,可修改为return list(name)。
内容的提问来源于stack exchange,提问作者Emil
相关产品推荐
相关产品推荐

