如何将Pandas DataFrame同索引多行合并为一行完成数据清洗
跨行分组属性数据清洗实现方案
核心思路
先过滤全空行和无关数据行,按属性类型归集所有对应值后直接拼接生成结构化表,无需依赖固定行号。
实现代码(基于pandas实现)
import pandas as pd # 读取源文件,这里替换为你的文件读取逻辑,比如pd.read_excel/ pd.read_csv raw_df = pd.read_excel("your_source_file.xlsx", header=None) # -------------------------- 步骤1:预处理过滤无效行 -------------------------- # 过滤全NaN空行 raw_df = raw_df.dropna(how="all") # 过滤属性标识列(假设属性标识存放在第0列,若为索引则替换为raw_df.index.isin即可) valid_attrs = ["Fruit", "Colour", "Quantity"] raw_df = raw_df[raw_df.iloc[:, 0].isin(valid_attrs)].reset_index(drop=True) # -------------------------- 步骤2:按属性归集所有值 -------------------------- attr_map = { "Fruit": [], "Colour": [], "Quantity": [] } for _, row in raw_df.iterrows(): # 获取当前行属性名 current_attr = row.iloc[0] # 提取当前行除属性列外的所有非空有效值 valid_vals = row.iloc[1:].dropna().tolist() attr_map[current_attr].extend(valid_vals) # -------------------------- 步骤3:生成目标表并导出 -------------------------- result_df = pd.DataFrame(attr_map) result_df.to_csv("cleaned_fruit_data.csv", index=False, encoding="utf-8-sig")
适配说明
- 若属性标识是DataFrame的索引而非第一列,将
raw_df.iloc[:, 0]替换为raw_df.index即可 - 自动适配任意数量的换行分组、任意上下无关数据,只要属性标识正确即可正常归集
- 支持批量处理大量源文件,只需外层套文件遍历逻辑即可
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

