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

如何简化Python Pandas视频时长分类代码,减少冗余?

Pandas视频时长区间划分代码优化方案

原代码的问题点

  • 重复调用df_preroll.loc赋值,多次遍历DataFrame,运行效率偏低
  • 空值判断逻辑错误:Pandas中缺失值(NaN)不能用== None判断,需用pd.isna()或df.isnull()

优化方案

方法1:使用pd.cut(推荐,效率最高)

pd.cut是Pandas专为数值区间划分设计的函数,可一次性完成所有区间赋值,无需多次遍历:

import pandas as pd

# 定义区间边界与对应标签
bins = [0, 6, 14, 29, float('inf')]
labels = ['0-6', '7-14', '15-29', '30+']

# 执行区间划分,空值自动保留为NaN
df_preroll['Video_Length_Bracket'] = pd.cut(
    df_preroll['Video length'],
    bins=bins,
    labels=labels,
    include_lowest=True  # 确保左边界0被包含,匹配原代码>0且<=6的逻辑
)

说明:

  • include_lowest=True让区间左闭右开的特性适配原代码的0 < x <=6逻辑
  • 空值会被自动处理为NaN,无需额外赋值操作

方法2:使用np.select(灵活性更强,适配复杂条件)

如果需要自定义更复杂的区间规则,可使用np.select一次性完成条件映射:

import numpy as np

# 定义条件列表与对应结果
conditions = [
    (df_preroll['Video length'] > 0) & (df_preroll['Video length'] <= 6),
    (df_preroll['Video length'] >= 7) & (df_preroll['Video length'] <= 14),
    (df_preroll['Video length'] >= 15) & (df_preroll['Video length'] <= 29),
    df_preroll['Video length'] >= 30
]
choices = ['0-6', '7-14', '15-29', '30+']

# 赋值,未匹配条件的空值自动设为NaN
df_preroll['Video_Length_Bracket'] = np.select(conditions, choices, default=np.nan)

空值处理的正确方式

原代码中df_preroll.loc[(df_preroll['Video length'] == None), ...]的判断逻辑错误,正确的空值检查应使用:

# 检测空值
df_preroll['Video length'].isna()

上述两种优化方案已自动处理空值,无需额外执行空值赋值操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:03:10