使用Polars官方示例代码遇ImportError:需安装pyarrow处理日期类型
解决Polars中"ImportError: 'pyarrow' is required for converting a Sequence of date or datetime values to a PySeries"报错
问题重现
运行Polars用户指南中的示例代码时触发如下报错:
ImportError: 'pyarrow' is required for converting a Sequence of date or datetime values to a PySeries
示例代码:
import polars as pl # to enrich the examples in this quickstart with dates from datetime import datetime, timedelta # to generate data for the examples import numpy as np dataframe = pl.DataFrame({"integer": [1, 2, 3], "date": [ (datetime(2022, 1, 1)), (datetime(2022, 1, 2)), (datetime(2022, 1, 3)) ], "float":[4.0, 5.0, 6.0]}) dataframe
解决方案
方案1:安装pyarrow依赖
直接通过包管理工具安装pyarrow即可解决类型转换的依赖问题:
- 使用pip安装:
pip install pyarrow
- 使用conda安装(conda环境下):
conda install pyarrow -c conda-forge
方案2:不依赖pyarrow,改用numpy datetime64类型
如果你不想引入pyarrow依赖,可以将Python原生datetime对象组成的序列转换为numpy的datetime64[ns]类型,Polars可以直接处理这种类型的数据,无需额外依赖。修改后的代码如下:
import polars as pl from datetime import datetime, timedelta import numpy as np dataframe = pl.DataFrame( { "integer": [1, 2, 3], "date": np.array( [datetime(2022, 1, 1), datetime(2022, 1, 2), datetime(2022, 1, 3)], dtype="datetime64[ns]" ), "float": [4.0, 5.0, 6.0] } ) print(dataframe)
原因说明
Polars在处理Python原生datetime对象构成的序列时,需要借助pyarrow完成从Python对象到Polars内部PySeries的类型转换;而numpy的datetime64类型与Polars的日期类型兼容度更高,可以直接被解析处理,因此不需要pyarrow依赖。
内容的提问来源于stack exchange,提问作者Alexandr
相关产品推荐
相关产品推荐

