Pandas如何提取DataFrame每个单元格内列表的首个元素

问题场景
需要对每个单元格存储了列表的DataFrame做处理,逐行提取所有单元格内列表的第一个值,最终得到无嵌套冗余值的规整DataFrame。
原有尝试代码:
for i in clean_columns: print(clean_columns[i][:][0][0])
该写法仅能输出第一行的数据,无法覆盖全量行。
问题原因
原有写法的逻辑是:取整列数据后直接取索引为0的元素(也就是第一行的值),没有逐行遍历单元格,自然只能拿到第一行的结果。
解决方案
不需要写复杂循环,直接用pandas自带的单元格级映射方法处理即可,效率比手写循环高很多。
- 全表所有单元格统一提取列表第一个值(兼容空值/非列表值场景,避免索引报错)
result_df = clean_columns.applymap( lambda x: x[0] if isinstance(x, list) and len(x) > 0 else x )
如果确认所有单元格都是非空列表,可以简化写法:
result_df = clean_columns.applymap(lambda x: x[0])
- 如果只需要处理指定列,不需要修改全表,可以针对单列做映射:
# 把需要处理的列名放到下面的列表中即可 target_cols = ['列名1', '列名2', '列名3'] for col in target_cols: clean_columns[col] = clean_columns[col].apply(lambda x: x[0] if isinstance(x, list) and len(x) > 0 else x)
运行后得到的结果就是所有单元格都取了列表第一个值的目标DataFrame,会自动覆盖所有行,不会出现只取第一行的问题。
内容的提问来源于stack exchange,提问作者cloudycider
相关产品推荐
相关产品推荐

