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

如何在Python中根据列内数据拆分Duration列为两列并转换类型?

处理Duration列的拆分与类型转换方案

用Python Pandas实现

假设你的数据存在Pandas DataFrame中,直接用正则提取和数值转换就能搞定:

import pandas as pd

# 示例数据,替换成你的实际数据框
df = pd.DataFrame({"Duration": ["110", "2 seasons", "45", "5 seasons", "90"]})

# 1. 提取季数到新列Season_Count
# 正则匹配数字,兼容"season"和"seasons"两种写法
df["Season_Count"] = df["Duration"].str.extract(r'(\d+) seasons?', expand=False)
# 转成支持空值的整数类型
df["Season_Count"] = df["Season_Count"].astype("Int64")

# 2. 处理原Duration列:只保留纯数字内容,转成整数,非数字设为NULL
# errors="coerce"会把无法转成数字的内容转为NaN,再转成支持空值的Int64类型
df["Duration"] = pd.to_numeric(df["Duration"], errors="coerce").astype("Int64")

执行后你会得到:

  • Duration列:纯数字的行保留整数,带"seasons"的行变为NaN(空值)
  • Season_Count列:带"seasons"的行提取出数字,其他行是NaN

用SQL实现(以MySQL为例)

如果数据存在数据库里,用SQL语句也能完成:

-- 先给表新增Season_Count列
ALTER TABLE your_table ADD COLUMN Season_Count INT;

-- 提取Duration中的季数到新列
UPDATE your_table
SET Season_Count = CAST(SUBSTRING_INDEX(Duration, ' ', 1) AS UNSIGNED)
WHERE Duration LIKE '%season%';

-- 更新原Duration列:仅保留纯数字内容,其余设为NULL
UPDATE your_table
SET Duration = CASE
    WHEN Duration REGEXP '^[0-9]+$' THEN CAST(Duration AS UNSIGNED)
    ELSE NULL
END;

逻辑说明:

  • 用SUBSTRING_INDEX截取空格前的数字,匹配带"season"的行
  • 通过正则^[0-9]+$判断是否为纯数字,是则转整数,否则设为NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:45:33