当前位置: 首页 > news >正文

【Pandas】pandas DataFrame last_valid_index

Pandas2.2 DataFrame

Time Series-related

方法描述
DataFrame.asfreq(freq[, method, how, …])用于**将时间序列数据转换为指定频率(resample to frequency)**的方法
DataFrame.asof(where[, subset])用于查找时间序列中最接近指定时间点的非 NaN 值的方法
DataFrame.shift([periods, freq, axis, …])用于**将 DataFrame 的数据沿着指定轴移动(平移)**的方法
DataFrame.first_valid_index()用于获取 DataFrame 中第一个非空(非 NaN)值所在的行索引的方法
DataFrame.last_valid_index()用于获取 DataFrame 中最后一个非空(非 NaN)值所在的行索引的方法

pandas.DataFrame.last_valid_index()

pandas.DataFrame.last_valid_index() 是一个用于获取 DataFrame 中最后一个非空(非 NaN)值所在的行索引的方法。它与 .first_valid_index() 相对,常用于时间序列或一般数据中,查找最后一个有效观测值的位置


📌 方法签名
DataFrame.last_valid_index()

🔧 参数说明:
  • 无参数。

✅ 返回值
  • 返回一个标量值,表示最后一个非空值所在的行索引
  • 如果整个 DataFrame 都是 NaN,则返回 None

🧪 示例代码及结果
示例 1:基本用法
import pandas as pd
import numpy as npdf = pd.DataFrame({'A': [np.nan, np.nan, 3, 4, 5],'B': [np.nan, 2, np.nan, 4, 5],'C': [1, 2, 3, np.nan, np.nan]
})print("Original DataFrame:")
print(df)
输出:
     A    B    C
0  NaN  NaN  1.0
1  NaN  2.0  2.0
2  3.0  NaN  3.0
3  4.0  4.0  NaN
4  5.0  5.0  NaN
# 获取最后一个非空值的索引
result = df.last_valid_index()
print("\nLast valid index:", result)
输出:
Last valid index: 4

解释:列 'A''B' 在第 4 行仍有有效值,因此整体返回索引 4


示例 2:每列的最后一个有效索引不同
df = pd.DataFrame({'A': [1, 2, 3, np.nan, np.nan],'B': [1, 2, np.nan, np.nan, np.nan],'C': [1, 2, 3, 4, np.nan]
})print("Original DataFrame:")
print(df)result = df.last_valid_index()
print("\nLast valid index:", result)
输出:
   A    B    C
0  1  1.0  1.0
1  2  2.0  2.0
2  3  NaN  3.0
3 NaN  NaN  4.0
4 NaN  NaN  NaNLast valid index: 3

虽然 'A''B' 在第 3 行之后就没有有效值了,但 'C' 在第 3 行仍有有效值,所以整体返回索引 3


示例 3:所有值都是 NaN 的情况
df_all_nan = pd.DataFrame({'A': [np.nan, np.nan],'B': [np.nan, np.nan]
})result = df_all_nan.last_valid_index()
print("\nLast valid index when all are NaN:", result)
输出:
Last valid index when all are NaN: None

🧠 应用场景
场景说明
时间序列分析查找最晚的有效观测时间点
数据清洗定位数据结束位置,去除尾部的空值
缺失值处理确定最后一行有有效数据的位置
数据对齐找出多个时间序列中最晚的数据终点
特征工程判断某个变量何时停止记录

⚠️ 注意事项
  • 返回的是行索引,不是具体的列名或位置;
  • 只要某一行中任意一列有非空值,该行就被视为“有效”;
  • 不会修改原始数据;
  • 对于时间序列数据,返回的时间索引可以直接用于切片或筛选。

✅ 总结对比
方法是否返回索引是否考虑整行有效是否支持时间索引
.last_valid_index()❌(只要有一列非空即可)
.notna().iloc[::-1].idxmax()✅(可按列使用)
.dropna().index[-1]✅(整行非空)

如果你希望快速定位 DataFrame 中最后出现有效数据的行索引.last_valid_index() 是非常简洁高效的选择。

相关文章:

  • PHP语法基础篇(六):数组
  • 【Docker管理工具】安装Docker容器自动更新工具Watchtower
  • HTTP协议中Connection: Keep-Alive和Keep-Alive: timeout=60, max=100的作用
  • vue项目中纯前端实现导出pdf文件,不需要后端处理。
  • 探索相机成像的奥秘 - 齐次坐标、径向失真和图像传感器倾斜
  • ROS:录制相机、IMU、GNSS等设备数据
  • 扫地机产品认证--黑名单制裁公司能否拿到美国产品准入许可(FCC认证)
  • 疲劳检测与行为分析:工厂智能化实践
  • gemini-cli 踩坑实录
  • vue a-table自定义表头颜色+合并表格
  • 如何对sqlserver数据库中存储JOSN数据字段进行更新
  • Vue3项目引入高德地图【超详细教程】
  • VB.NET,C#字典对象来保存用户数据,支持大小写
  • 关于汉语和英语哪个更先进、历史更久的争论
  • 【系统分析师】2020年真题:案例分析-答案及详解
  • java代码规范
  • Object
  • Linux系统(信号篇)信号的保存
  • 信任边界的人生智慧
  • 创建一个基于YOLOv8+PyQt界面的驾驶员疲劳驾驶检测系统 实现对驾驶员疲劳状态的打哈欠检测,头部下垂 疲劳眼睛检测识别