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

向嵌套Dataframe的子Dataframe追加行后出现NaN问题求助

解决嵌套DataFrame赋值后变为NaN的问题

核心原因

  1. Pandas对嵌套DataFrame的赋值存在严格类型校验,若新生成的子DataFrame与原列的结构、 dtype不匹配,会被强制转为NaN
  2. at方法获取的可能是原数据的副本而非视图,赋值操作无法同步回原DataFrame
  3. 已弃用的append方法存在隐式类型转换问题,导致返回的子DataFrame与原列不兼容

修复步骤

1. 替换弃用的append方法为pd.concat

append在Pandas 2.0+已被弃用,pd.concat更稳定且能更好地控制类型:

import pandas as pd

def appendToNeighborDF(neighbor, ipAddress, latitude, longitude):
    # 创建与原neighbor字段类型一致的新行DataFrame
    new_row = pd.DataFrame({
        'ipAddress': [ipAddress],
        'latitude': [latitude],
        'longitude': [longitude]
    }, dtype=neighbor.dtypes.to_dict())
    # 合并原DataFrame与新行
    neighborNew = pd.concat([neighbor, new_row], ignore_index=True)
    return neighborNew

2. 修改赋值逻辑,确保操作同步回原DataFrame

避免直接用at赋值嵌套DataFrame,改用"提取-修改-重新赋值"的流程,同时用loc确保操作的是正确的行:

# 提取目标行的子DataFrame(用copy避免视图/副本问题)
current_neighbors = nodes.loc[index, 'neighbors'].copy()
# 追加新行
updated_neighbors = appendToNeighborDF(current_neighbors, secondNode.ipAddress, secondNode.latitude, secondNode.longitude)
# 重新赋值回原DataFrame
nodes.loc[index, 'neighbors'] = updated_neighbors

3. 确保neighbors列的类型正确

检查并设置neighbors列为object类型(用于存储嵌套DataFrame):

nodes['neighbors'] = nodes['neighbors'].astype(object)

4. 验证索引唯一性

若nodes的索引存在重复,会导致loc/at定位错误,需重置索引:

nodes = nodes.reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:03:27