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

Python 3.11中查找连续280+个0的起始行号求助

解决方法

以下是针对Python 3.11环境,高效找出数据集differences列中连续出现超过280次0的起始行号的改进代码,同时避免DeprecationWarning:

1. 模拟示例数据

先构造一个包含连续0的测试数据集:

import pandas as pd
import numpy as np

# 生成示例数据:混合随机值和多段连续0
np.random.seed(42)
data = {
    'differences': np.concatenate([
        np.random.randint(1, 10, 100),  # 前100行非0
        np.zeros(300),  # 连续300个0(符合条件)
        np.random.randint(1, 10, 200),
        np.zeros(250),  # 连续250个0(不符合)
        np.zeros(350),  # 连续350个0(符合条件)
        np.random.randint(1, 10, 150)
    ])
}
df = pd.DataFrame(data)

2. 改进后的核心代码

# 标记连续相同值的分组
df['group_id'] = (df['differences'] != df['differences'].shift(1)).cumsum()

# 计算每个分组的起始行号、长度和对应的值
group_stats = df.groupby('group_id').agg(
    start_row=('differences', 'first_valid_index'),
    length=('differences', 'size'),
    value=('differences', 'first')
)

# 筛选出值为0且长度>280的分组,提取起始行号
valid_start_rows = group_stats[(group_stats['value'] == 0) & (group_stats['length'] > 280)]['start_row'].tolist()

print("符合条件的起始行号数组:", valid_start_rows)

代码说明

  • 用shift()和cumsum()生成连续相同值的分组ID,这是pandas处理连续值分组的标准现代写法,不会触发废弃警告。
  • 通过groupby().agg()一次性计算每个分组的起始行、长度和值,逻辑清晰且效率高。
  • 最终筛选出符合条件的起始行号并转为列表,完全满足需求。

原代码触发DeprecationWarning的常见原因

  • 使用了pandas已废弃的参数,比如groupby中的旧排序参数、agg中的过时语法。
  • 调用了numpy已废弃的函数(如np.int),改用原生Python类型或np.int64即可避免。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:03:13