如何用Python为不规则Excel生成的Pandas DataFrame添加化合物归属列
解决方案
你可以利用Pandas的where()和ffill()方法实现这个需求,全程无需循环,既简洁又稳定,是Pythonic的处理方式:
- 标记化合物标题行:用
where()方法仅保留A列中属于化合物标题的行(比如匹配以"Compound "开头的值),将其他行设为NaN,存入新的"Compound"列。 - 向前填充化合物名称:用
ffill()(forward fill)将每个NaN值替换为上方最近的非空化合物名称,实现子条目自动匹配所属化合物。 - (可选)清理标题行:如果不需要保留原始的化合物标题行,可过滤掉这些行,只保留子条目数据。
代码示例
假设你的DataFrame名为df,原始数据列是A:
import pandas as pd # 1. 初始化Compound列,仅保留化合物标题行的值 df['Compound'] = df['A'].where(df['A'].str.startswith('Compound ')) # 2. 向前填充,为所有子条目匹配所属化合物 df['Compound'] = df['Compound'].ffill() # 3. 可选:过滤掉原始的化合物标题行,只保留子条目 df = df[~df['A'].str.startswith('Compound ')].reset_index(drop=True)
补充说明
- 如果你的化合物标题不是以"Compound "开头,可调整
str.startswith()的参数,或者用str.contains()匹配更通用的模式(比如df['A'].str.contains('Compound \w+'))。 ffill()会自动处理不同化合物下条目数量不固定的情况,无论标题下有多少条子条目,都会正确继承上方的化合物名称。
内容的提问来源于stack exchange,提问作者Ruairi McConville
相关产品推荐
相关产品推荐

