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

如何用Python将DataFrame中数值与分类变量拆分为不同列?

拆分DataFrame列中的数值与分类值

方法一:利用pd.to_numeric快速区分

pd.to_numeric的errors='coerce'参数会将无法转换为数值的内容转为NaN,刚好用来拆分两类值:

import pandas as pd
df = pd.DataFrame({"col":['a', '1', 'b', '2', '3', 'c', 'd' ,'e']})

# 提取数值,非数值转为NaN
df['numeric_col'] = pd.to_numeric(df['col'], errors='coerce')
# 提取分类值,仅保留非数值内容
df['category_col'] = df['col'].where(df['numeric_col'].isna())

执行后numeric_col列仅保留可转换的数值,category_col列仅保留分类字符。

方法二:字符串匹配判断

如果目标数值是整数,直接用str.isdigit()判断;如果包含小数,改用正则匹配:

# 处理整数场景
df['numeric_col'] = df['col'].where(df['col'].str.isdigit()).astype(float)
df['category_col'] = df['col'].where(~df['col'].str.isdigit())

# 处理包含小数的场景
df['numeric_col'] = df['col'].where(df['col'].str.match(r'^\d+(\.\d+)?$')).astype(float)
df['category_col'] = df['col'].where(~df['col'].str.match(r'^\d+(\.\d+)?$'))

复用自定义列表函数

如果要沿用你自己写的列表处理函数,用apply方法批量处理列元素,再拆分结果到新列:

# 假设你的自定义函数返回(数值, 分类值)元组
def split_num_cat(x):
    if x.replace('.', '', 1).isdigit():  # 兼容小数
        return (float(x), None)
    else:
        return (None, x)

# 应用函数并拆分到两列
df[['numeric_col', 'category_col']] = df['col'].apply(lambda x: pd.Series(split_num_cat(x)))

这样就能像pd.get_dummies一样直接将结果映射到DataFrame的新列中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:15:11