You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字典键作为列、值作为行逐行填充pandas DataFrame

问题解决方法

错误根因

你调用pca_df.from_dict()的用法不符合需求:from_dict是pandas的类方法,作用是从字典生成全新的DataFrame对象,不会修改你已有的pca_df,也无法直接给指定行填充数据。

正确实现代码

import pandas as pd
from collections import Counter

# 模拟你的初始pca_df,实际使用时替换成你自己的初始数据即可
pca_df = pd.DataFrame({
    "seqName": ["Wuhan/Hu-1/2019", "sample_1", "sample_2"],
    "clade": ["19A", "20B", "20A"]
})

# 方案1:已知所有可能的突变类型,提前初始化列,效率更高
all_mut_types = ["C>T", "A>G", "G>A", "G>C", "T>C", "C>A", "G>T", "A>T"]
for mut in all_mut_types:
    pca_df[mut] = 0

# 逐行处理逻辑
for line in range(1, len(pca_df)): # 可替换成你原来的range(1,20),匹配实际行数
    # 替换为你实际的取值逻辑:substitutions = final_df.iloc[line,2]
    if line == 1:
        substitutions = "C241T,C3037T,C14408T,A23403G,C27046T,G28881A,G28882A,G28883C"
    elif line == 2:
        substitutions = "C241T,C3037T,C14408T,A23403G,C29144T"
    
    # 提取突变类型并统计出现次数
    mut_list = [f"{s[0]}>{s[-1]}" for s in substitutions.split(",")]
    mut_count = Counter(mut_list)

    # 给当前行对应列赋值
    for mut, cnt in mut_count.items():
        if mut in pca_df.columns:
            pca_df.loc[line, mut] = cnt

# 输出结果查看
print(pca_df)

可选动态新增列方案

如果你无法提前枚举所有突变类型,需要根据处理结果动态新增列,可以去掉提前初始化列的部分,修改赋值逻辑如下:

for line in range(1, len(pca_df)):
    # 省略获取substitutions、生成mut_count的相同逻辑
    for mut, cnt in mut_count.items():
        # 不存在的列先新增,默认值全为0
        if mut not in pca_df.columns:
            pca_df[mut] = 0
        pca_df.loc[line, mut] = cnt

核心改动说明

  • 用collections.Counter直接统计突变类型的出现次数,简化代码
  • 使用pca_df.loc[行索引, 列名]的语法修改指定位置的值,这是pandas修改已有DataFrame数据的标准写法
  • 新增列时直接给DataFrame赋值新列即可,不需要调用from_dict方法

内容的提问来源于stack exchange,提问作者user17153595

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:24:04