Pandas DataFrame空值填充:accession尾为字母时拼接上方有效编号
Pandas实现方案
实现逻辑
- 先标记基准行:accession编号不以字母结尾的行作为基准行
- 生成基准值列:仅基准行保留自身accession值,其余位置为空后向下填充,所有行都能拿到离自己最近的上方基准行的accession值
- 对需要填充的空列,若当前行属于以字母结尾的行,就用「基准值 + 空格 + 当前行accession值」填充空单元格
代码实现
import pandas as pd import re # 读取你的源数据,替换为你实际的读取逻辑 df = pd.read_csv("你的数据文件路径.csv") # 标记是否为以字母结尾需要填充的行 df['is_suffix_row'] = df['accession'].apply(lambda x: bool(re.search(r'[A-Za-z]$', str(x)))) # 向下填充最近的上方基准accession值 df['base_accession'] = df['accession'].where(~df['is_suffix_row']).ffill() # 单列填充示例,假设需要填充的列名为target_col df['target_col'] = df.apply( lambda row: f"{row['base_accession']} {row['accession']}" if pd.isna(row['target_col']) and row['is_suffix_row'] else row['target_col'], axis=1 ) # 多列批量填充示例,替换为你实际需要填充的列名 # fill_cols = ["列名1", "列名2", "列名3"] # for col in fill_cols: # df[col] = df.apply( # lambda row: f"{row['base_accession']} {row['accession']}" if pd.isna(row[col]) and row['is_suffix_row'] else row[col], # axis=1 # ) # 清理辅助列 df = df.drop(columns=["is_suffix_row", "base_accession"]) # 输出结果 df.to_csv("填充后的结果.csv", index=False)
注:正则
r'[A-Za-z]$'用于匹配末尾为大小写字母的情况,如果你的数据中accession后缀仅为大写字母,可以修改为r'[A-Z]$'提升匹配精度。
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

