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

