如何用Pandas提取单列列表值并生成对应多列(限定7个值)
Pandas提取列中列表值生成多列解决方案
问题场景
给定如下DataFrame:
import pandas as pd a = pd.DataFrame({"test":["","","","",[1,2,3,4,5,6,6],"","",[11,12,13,14,15,16,17]]})
test列包含空字符串和长度固定为7的列表,需要将列表中的元素分别映射到example_1至example_7列,空值行对应列保持为空。
解决方案
可以通过两种简洁方式实现需求:
方法一:结合apply与pd.Series
# 处理test列:列表转Series,空值行生成7个空值的Series temp_df = a['test'].apply(lambda x: pd.Series(x) if isinstance(x, list) else pd.Series([None]*7)) # 重命名列 temp_df.columns = [f'example_{i+1}' for i in range(7)] # 合并到原DataFrame result = pd.concat([a, temp_df], axis=1)
方法二:先替换空值再直接转DataFrame
# 将空字符串替换为None,避免转列表时出错 a['test'] = a['test'].map(lambda x: x if isinstance(x, list) else None) # 将列表列直接转为多列,空值自动填充为NaN temp_df = pd.DataFrame( a['test'].tolist(), index=a.index, columns=[f'example_{i+1}' for i in range(7)] ) # 合并结果 result = pd.concat([a, temp_df], axis=1)
结果说明
执行后result的example_1至example_7列会对应填充列表中的元素,空字符串所在行的这些列则为NaN,若需要转为空字符串可追加result = result.fillna('')。
内容的提问来源于stack exchange,提问作者Learner91
相关产品推荐
相关产品推荐

