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

Pandas转Polars失败:如何实现稳健的DataFrame转换?

稳健实现Pandas转Polars的方法

报错原因

TypeError: 'float' object cannot be converted to 'PyString' 通常是因为Pandas DataFrame中存在混合类型列——比如某一列同时包含字符串和浮点值(DBnomics返回的元数据列容易出现这种情况),Polars自动推断类型时无法统一,从而触发错误。

稳健转换方案

  • 提前统一列类型
    转换前检查并修正Pandas列的类型,针对混合类型列强制转为统一类型(比如字符串):

    import pandas as pd
    from dbnomics import fetch_series
    import polars as pl
    
    df = fetch_series("WB/WDI/A-NY.GDP.MKTP.CD-RUS")
    
    # 遍历处理混合类型的object列
    for col in df.columns:
        if df[col].dtype == object:
            # 检查列内是否存在多种数据类型
            type_counts = df[col].apply(type).value_counts()
            if len(type_counts) > 1:
                df[col] = df[col].astype(str)
    
    pl_df = pl.from_pandas(df)
    
  • 强制指定Schema
    在from_pandas时手动定义列类型,绕过自动推断的问题:

    import pandas as pd
    from dbnomics import fetch_series
    import polars as pl
    
    df = fetch_series("WB/WDI/A-NY.GDP.MKTP.CD-RUS")
    
    # 根据实际数据定义schema,确保类型统一
    schema = {
        "series_code": pl.Utf8,
        "period": pl.Date,
        "value": pl.Float64,
        "country": pl.Utf8
    }
    
    pl_df = pl.from_pandas(df, schema=schema)
    
  • 跳过Pandas直接读取
    如果DBnomics支持直接导出CSV,可直接用Polars读取,避免中间转换:

    import polars as pl
    
    # 替换为DBnomics对应的CSV接口链接
    pl_df = pl.read_csv("https://api.db.nomics.world/v21/series/WB/WDI/A-NY.GDP.MKTP.CD-RUS?format=csv")
    
  • 清理异常值/空值
    针对空值或类型异常的数据提前处理:

    # 字符串列:将空值转为空字符串
    df = df.fillna("")
    # 数值列:强制转换,无法转换的设为NaN
    df["value"] = pd.to_numeric(df["value"], errors="coerce")
    
    pl_df = pl.from_pandas(df)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:12:44