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

如何更新DataFrame添加值且不覆盖同列已有数据?

问题:Pandas中如何仅更新指定映射并保留DataFrame原有值

原始DataFrame

reason         market_state
0        NaN        UNSCHEDULED_AUCTION
1        NaN                 None
2        NaN               CLOSED
3        NaN      CONTINUOUS_TRADING
4        NaN                 None
5        NaN     UNSCHEDULED_AUCTION
6        NaN     UNSCHEDULED_AUCTION
7         F                 None
8        NaN      CONTINUOUS_TRADING
9         SL                 None
10       NaN               HALTED
11       NaN                 None
12       NaN                 None
13        L                  None

错误尝试及问题

尝试用三次独立的map赋值更新market_state:

market_info_df['market_state'] = market_info_df['reason'].map({'F': OPENING_AUCTION})
market_info_df['market_state'] = market_info_df['reason'].map({'SL': CLOSING_AUCTION})
market_info_df['market_state'] = market_info_df['reason'].map({'L': CLOSED})

但每次赋值都会覆盖整个market_state列,导致未匹配的行全部变为NaN,仅保留最后一次映射的结果。

解决方案

方法1:合并映射字典 + fillna保留原值

将所有映射规则合并为一个字典,用map生成新值后,通过fillna填充回原有列的非匹配值:

# 定义完整映射字典
reason_map = {
    'F': OPENING_AUCTION,
    'SL': CLOSING_AUCTION,
    'L': CLOSED
}

# 仅更新匹配行,其余保留原值
market_info_df['market_state'] = market_info_df['reason'].map(reason_map).fillna(market_info_df['market_state'])

方法2:用loc按条件逐个更新

通过loc精准定位符合条件的行,单独更新对应值,不会影响其他行:

market_info_df.loc[market_info_df['reason'] == 'F', 'market_state'] = OPENING_AUCTION
market_info_df.loc[market_info_df['reason'] == 'SL', 'market_state'] = CLOSING_AUCTION
market_info_df.loc[market_info_df['reason'] == 'L', 'market_state'] = CLOSED

目标结果

两种方法均可得到如下DataFrame:

reason         market_state
0      NaN         UNSCHEDULED_AUCTION
1      NaN                 None
2      NaN               CLOSED
3      NaN        CONTINUOUS_TRADING
4      NaN                 None
5      NaN        UNSCHEDULED_AUCTION
6      NaN        UNSCHEDULED_AUCTION
7       F           OPENING_AUCTION
8      NaN       CONTINUOUS_TRADING
9       SL          CLOSING_AUCTION
10     NaN               HALTED
11     NaN                None
12     NaN                None
13      L               CLOSED

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:14