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

JupyterLab中移除NaN后DataFrame为空问题求助

问题根源与修复方案

核心问题分析

这段代码里有两处关键问题,导致移除NaN后DataFrame直接变空:

  1. 重复关联时间数据+内连接引发索引不匹配:先通过join(deltaTime)关联了时间序列,之后又用how='inner'关联deltaTime_df,如果两个时间数据的索引无法完全匹配,内连接会直接过滤掉所有行。
  2. 冗余的NaN处理逻辑:interpolate()已经能填充大部分NaN,之后的dropna()默认会删除任何包含NaN的行,如果数据中存在整行NaN的情况,或者插值后仍有全NaN列,就会意外删光所有数据。

修复后的完整代码

# 转换时间数据为分钟级数值
rawTime = pd.to_datetime(data.iloc[3:, 0], format='%m/%d/%Y %H:%M')
# 修正时间单位:纳秒转分钟,用10**9(1秒=1e9纳秒)
deltaTime = (rawTime - rawTime.iloc[0]).astype(np.int64) / (10**9 * 60)

# 生成50个传感器名称
names = [f"GeoFlex{i}" for i in range(1, 51)]

# 计算传感器数据的列索引范围
num_sensors = len(names)
tiltX_cols = list(range(5, 5 + 4 * num_sensors, 4))
tiltY_cols = list(range(6, 6 + 4 * num_sensors, 4))

# 动态获取数据总行数
end_row = data.shape[0]

# 提取X/Y轴倾斜数据并设置列名
tiltX = data.iloc[3:end_row, tiltX_cols].set_axis(names[:len(tiltX_cols)], axis="columns")
tiltY = data.iloc[3:end_row, tiltY_cols].set_axis(names[:len(tiltY_cols)], axis="columns")

# 转换为数值类型,无法转换的内容设为NaN
tiltX = tiltX.apply(pd.to_numeric, errors='coerce')
tiltY = tiltY.apply(pd.to_numeric, errors='coerce')

# 线性插值填充NaN,优先保留现有数据
tiltX_interpolated = tiltX.interpolate(method='linear', axis=0)
tiltY_interpolated = tiltY.interpolate(method='linear', axis=0)

# 统一索引关联时间数据,避免索引不匹配
deltaTime_df = pd.DataFrame(deltaTime, index=rawTime.index, columns=['deltaTime'])
tiltXWithoutNaN = tiltX_interpolated.join(deltaTime_df)
tiltYWithoutNaN = tiltY_interpolated.join(deltaTime_df)

# 可选:如果仍有零星NaN,仅删除传感器数据列含NaN的行(谨慎使用)
# tiltXWithoutNaN = tiltXWithoutNaN.dropna(subset=names[:len(tiltX_cols)])
# tiltYWithoutNaN = tiltYWithoutNaN.dropna(subset=names[:len(tiltY_cols)])

关键修复说明

  • 修正时间计算错误:原代码中10e8*60的单位转换有误,纳秒转分钟应该用10**9 * 60,确保时间差数值准确。
  • 统一索引逻辑:用rawTime的索引创建deltaTime_df,和tiltX/tiltY的索引完全对齐,避免关联时出现索引不匹配的问题。
  • 简化NaN处理流程:先完成插值填充,再关联时间数据,去掉重复的join和冗余的类型转换;如果需要删除剩余NaN,指定仅针对传感器数据列操作,避免误删有效数据。
  • 移除冗余操作:删掉了重复关联时间数据的代码,避免多次操作导致的索引混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:23:11