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

如何将Pandas DataFrame中列的对象类型转换为数值类型?

问题描述

我有如下格式的CSV文件,构造的Pandas DataFrame如下:

table = {'column1': [1,2,3],
         'column2': ['(0.2, 0.02, NaN)','(0.0, 0.03, 0)','(0.1, NaN, 1)']}
df = pd.DataFrame(table)

我想要访问column2中存储的数组,但Pandas显示该列类型为object,打印df['column2'][0][0]得到的是'('而非0.2。尝试使用pd.to_numeric(df['column2'][0])也未成功,请问如何将该列的数据类型从object转换为数值类型?

解决方案
  • 方法1:字符串处理+拆分转换
    先清理字符串中的括号,按逗号拆分后转换为数值数组:

    import pandas as pd
    import numpy as np
    
    # 去除首尾括号并按逗号+空格拆分字符串
    df['column2'] = df['column2'].str.strip('()').str.split(', ')
    # 将每个子列表转为带NaN的数值数组
    df['column2'] = df['column2'].apply(lambda x: np.array(pd.to_numeric(x, errors='coerce')))
    

    处理后df['column2'][0][0]将返回0.2,所有元素均为数值类型,原字符串中的NaN会被正确识别为缺失值。

  • 方法2:用ast.literal_eval解析(需处理NaN)
    利用Python的抽象语法树解析字符串为原生对象,注意先替换字符串中的NaN为可解析的格式:

    import pandas as pd
    import ast
    import numpy as np
    
    # 替换字符串里的NaN为numpy的NaN标识,再解析为元组
    df['column2'] = df['column2'].str.replace('NaN', 'np.nan').apply(ast.literal_eval)
    # 转换为数值数组
    df['column2'] = df['column2'].apply(np.array)
    

    此方法更贴近原生数据结构解析,但要保证字符串中NaN的格式统一,避免解析报错。

  • 方法3:拆分为独立数值列(无需保留数组)
    如果不需要保留数组形式,直接拆分出多列数值:

    import pandas as pd
    
    # 拆分字符串并展开为多列
    expanded_cols = df['column2'].str.strip('()').str.split(', ', expand=True)
    # 批量转换为数值类型
    expanded_cols = expanded_cols.apply(pd.to_numeric, errors='coerce')
    # 重命名列并和原DataFrame合并
    df = pd.concat([df['column1'], expanded_cols.rename(columns={0:'col2_val1', 1:'col2_val2', 2:'col2_val3'})], axis=1)
    

    拆分后可直接操作独立的数值列,更适合后续数据分析场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:30:42