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

使用Append循环无法将查找结果写入Pandas DataFrame的问题

解决方法

首先你需要在循环中将每一组结果添加到new_df列表中,而非仅覆盖df_append变量;最后再将列表转换为Pandas DataFrame。以下是修正后的完整代码:

import pandas as pd
import array as arr

# 假设get_score_by_id函数用于检查lookup_id是否存在于df_past的id_number列,存在则返回"OK",否则返回None
def get_score_by_id(df_past, lookup_id):
    if lookup_id in df_past['id_number'].values:
        return "OK"
    return None

# 原始查找列表
items = arr.array('i', [111, 222, 333, 444, 777 , 1089 , 3562 ])
new_df = []

for item in items:
    lookup_id = item
    id_number = get_score_by_id(df_past, lookup_id)
    # 将查找项与对应结果以字典形式添加到列表,方便后续转DataFrame
    if id_number is not None:
        new_df.append({"Lookup item": lookup_id, "Corresponding item": id_number})
    else:
        new_df.append({"Lookup item": lookup_id, "Corresponding item": pd.NA})

# 转换为目标格式的DataFrame
result_df = pd.DataFrame(new_df)
print(result_df)

关键修改点

  • 保留所有行数据:循环中用new_df.append()替代单一变量赋值,将每一组查找结果存入列表,避免仅保留最后一条数据。
  • 结构化存储:用字典存储每行的列名与对应值,转换DataFrame时自动匹配列名,无需额外配置。
  • 规范缺失值:使用Pandas原生的pd.NA替代字符串'NAN',符合数据分析的缺失值处理标准。
  • 生成最终DataFrame:循环结束后通过pd.DataFrame()将列表转换为目标格式的表格。

高效替代方案(Pandas原生操作)

如果不想用手动循环,可利用Pandas向量化操作实现,模拟Excel VLOOKUP的逻辑,处理大数据量时效率更高:

import pandas as pd

# 原始查找列表
lookup_ids = [111, 222, 333, 444, 777 , 1089 , 3562 ]
# 假设df_past是包含id_number列的数据源DataFrame
df_past = pd.DataFrame({"id_number": [111, 23, 333, 444, 10101 ,777 , 222 ]})

# 构建结果DataFrame
result_df = pd.DataFrame({"Lookup item": lookup_ids})
# 批量判断每个查找项是否存在,生成对应结果列
result_df["Corresponding item"] = result_df["Lookup item"].apply(
    lambda x: "OK" if x in df_past["id_number"].values else pd.NA
)

print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:36:10