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

