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

如何在Pandas中为现有行新增列并更新对应值?

解决方法:直接更新以appid为索引的DataFrame,新增列并填充迭代数据

你的核心问题是首次迭代时原DataFrame缺少目标列,且直接用append/concat修改单行的方式结构不匹配。以下是可行的解决方案:

核心思路

  1. 每次迭代前,先检查新数据的列是否存在于原DataFrame中,不存在则新增列(初始值设为NaN)
  2. 直接通过索引定位到对应appid的行,批量赋值新数据的内容,避免修改行的整体结构

完整代码示例

import pandas as pd
import numpy as np

# 初始化原DataFrame(以appid为索引)
data = {
    'name': ['Costume Party', 'Pillars Of Protection', 'Push Me', 'Fret Smasher Playtest', 'Luminary']
}
df = pd.DataFrame(data, index=[1648300, 1648310, 1648340, 1648350, 1648360])
df.index.name = 'appid'

# 封装更新逻辑,方便迭代调用
def update_df_with_new_data(df, appid, new_data):
    # 将单行DataFrame转为Series,方便提取列名和值
    new_series = new_data.squeeze()
    
    # 检查并新增缺失的列
    for col in new_series.index:
        if col not in df.columns:
            df[col] = np.nan
    
    # 给对应appid的行赋值新数据
    df.loc[appid, new_series.index] = new_series.values

# 模拟处理第一个appid
appid_1 = 1648300
new_data_1 = pd.DataFrame({
    'num_reviews': [0],
    'review_score': [0],
    'review_score_desc': ['No user reviews'],
    'total_positive': [0]
})
update_df_with_new_data(df, appid_1, new_data_1)

# 模拟处理第二个appid
appid_2 = 1648310
new_data_2 = pd.DataFrame({
    'num_reviews': [1],
    'review_score': [2],
    'review_score_desc': ['Positive'],
    'total_positive': [4]
})
update_df_with_new_data(df, appid_2, new_data_2)

print(df)

为什么你的原有方法无效?

你尝试的df.loc[appid].append(...)或pd.concat([df.loc[appid], ...])会把单行数据和新数据合并成更长的Series,但原DataFrame的列数是固定的,这种长度不匹配的赋值会直接失败。而上面的方法是保持列结构一致,只修改对应行的指定列值,完全适配原DataFrame的结构。

最终效果

运行后原DataFrame会自动新增所需列,对应appid的行填充数据,未处理的行则显示NaN,完全符合你想要的更新效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:55:31