使用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
相关产品推荐
相关产品推荐

