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

