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
相关产品推荐
相关产品推荐

