Pandas DataFrame批量处理:列名追加单位与备注迁移合并
解决方案:处理Pandas DataFrame的单位追加与备注合并
一、给化学物列名追加单位
假设你的单位信息存储在DataFrame的某一行(比如索引为unit_row_idx的行),可以通过循环批量重命名列:
import pandas as pd # 1. 指定单位所在行的索引(根据你的实际数据修改) unit_row_idx = 1 unit_values = df.loc[unit_row_idx] # 2. 筛选需要添加单位的化学物列(根据你的列名规则调整,比如列名含"chem"或具体化学物名称) chem_cols = [col for col in df.columns if "chem" in col] # 3. 循环生成新列名 new_col_names = {} for col in chem_cols: # 处理空单位的情况,避免列名出现空括号 unit = unit_values[col] if pd.notna(unit_values[col]) else "" new_col_names[col] = f"{col} ({unit})" if unit else col # 4. 应用新列名并删除原单位行 df.rename(columns=new_col_names, inplace=True) df = df.drop(unit_row_idx).reset_index(drop=True)
二、合并站点实验室备注到对应数据行
根据你描述的备注行布局,分两种常见场景处理:
场景1:备注行紧跟对应站点的数据行
如果每个站点的数据行下一行就是该站点的备注行(比如索引0是数据,1是备注;索引2是数据,3是备注...):
# 1. 提取所有备注行的内容(假设备注存储在"lab_note"列) site_notes = df["lab_note"].iloc[1::2].values # 2. 将备注赋值给对应的数据行(数据行是索引0,2,4...) df.loc[::2, "merged_lab_note"] = site_notes # 3. 删除多余的备注行并重置索引 df = df.drop(df.index[1::2]).reset_index(drop=True)
场景2:有明确的站点ID和行类型标识
如果DataFrame里有site_id(站点唯一标识)和row_type(区分"data"或"note"行):
# 1. 拆分数据行和备注行 data_df = df[df["row_type"] == "data"].reset_index(drop=True) note_df = df[df["row_type"] == "note"][["site_id", "lab_note"]].reset_index(drop=True) # 2. 按站点ID合并备注到数据行 final_df = pd.merge(data_df, note_df, on="site_id", how="left")
注意事项
- 所有代码中的列名、索引值请替换为你实际数据中的对应内容
- 如果单位信息不是单独一行,而是存储在特定列中,需调整
unit_values的提取逻辑 - 合并备注时,确保站点标识的唯一性,避免出现一对多的匹配错误
内容的提问来源于stack exchange,提问作者rlep
相关产品推荐
相关产品推荐

