Pandas转Polars DataFrame维度异常,疑达Polars行数上限求助
解决Polars转换Pandas大行数DataFrame时的行数异常问题
问题原因分析
从你提供的行数数据可直接看出:4392903069 - 4294967296 = 97935773,这个结果刚好等于转换后的异常行数。这是典型的32位整数溢出问题——Polars旧版本在处理超过2^32(约42.9亿)行的数据时,可能将行数用32位整数存储,导致数值被截断。
解决建议
升级Polars到最新稳定版
Polars后续版本已经针对大行数场景优化了整数存储逻辑,改用64位整数处理行数,升级后大概率能直接解决溢出问题。执行升级命令:pip install --upgrade polars绕过
pl.from_pandas,用文件中转转换
如果升级后仍有问题,可通过Parquet格式的中间文件中转,避免直接内存转换时的溢出:# Pandas导出为Parquet(原生支持大行数存储) result.to_parquet("large_data.parquet") # Polars读取Parquet文件 pl_df = pl.read_parquet("large_data.parquet")手动确保行数为64位整数类型
在构造Pandas DataFrame时,显式指定索引的类型为int64,避免Polars转换时误识别为32位整数:import pandas as pd import polars as pl # 构造大行数DataFrame时指定int64索引 result = pd.DataFrame(index=pd.RangeIndex(start=0, stop=4392903069, dtype="int64")) pl_df = pl.from_pandas(result)提交issue反馈(若问题仍存在)
如果以上方法都无效,去Polars的GitHub仓库提交issue,附上可复现的最小代码(比如构造指定行数的空DataFrame),帮助官方定位修复问题。
内容的提问来源于stack exchange,提问作者081N
相关产品推荐
相关产品推荐

