polars学习-03 数据类型转换
背景
polars学习系列文章,第3篇 数据类型转换。
该系列文章会分享到github,大家可以去下载jupyter文件
仓库地址:https://github.com/DataShare-duo/polars_learn
小编运行环境
import sysprint('python 版本:',sys.version.split('|')[0])
#python 版本: 3.11.5 import polars as plprint("polars 版本:",pl.__version__)
#polars 版本: 0.20.22
数据类型转换
数据类型转换,主要是通过 cast 方法来进行操作,该方法中有个参数 strict ,该参数决定当原数据类型不能转换为目标数据类型时,应该如何处理
- 严格模式,
strict=True(该参数默认是True),就会进行报错,打印出详细的错误信息 - 非严格模式,
strict=False,不会报错,无法转换为目标数据类型的值都会被置为null
pandas 中数据类型转换使用的是 astype 方法
示例
数值类型 Numerics
浮点型数值转换为整型时,会向下取整;大范围的数据类型转换为小范围数据类型时,如果数值溢出时,默认会报错,如果设置了 strict=False,则会被置为 null
df = pl.DataFrame({"integers": [1, 2, 3, 4, 5],"big_integers": [1, 10000002, 3, 10000004, 10000005],"floats": [4.0, 5.0, 6.0, 7.0, 8.0],"floats_with_decimal": [4.532, 5.5, 6.5, 7.5, 8.5],}
)print(df)
shape: (5, 4)
┌──────────┬──────────────┬────────┬─────────────────────┐
│ integers ┆ big_integers ┆ floats ┆ floats_with_decimal │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ f64 ┆ f64 │
╞══════════╪══════════════╪════════╪═════════════════════╡
│ 1 ┆ 1 ┆ 4.0 ┆ 4.532 │
│ 2 ┆ 10000002 ┆ 5.0 ┆ 5.5 │
│ 3 ┆ 3 ┆ 6.0 ┆ 6.5 │
│ 4 ┆ 10000004 ┆ 7.0 ┆ 7.5 │
│ 5 ┆ 10000005 ┆ 8.0 ┆ 8.5 │
└──────────┴──────────────┴────────┴─────────────────────┘out=df.select(pl.col("integers").cast(pl.Float32).alias("integers_as_floats"),pl.col("floats").cast(pl.Int32).alias("floats_as_integers"),pl.col("floats_with_decimal").cast(pl.Int32).alias("floats_with_decimal_as_integers"))print(out)
shape: (5, 3)
┌────────────────────┬────────────────────┬─────────────────────────────────┐
│ integers_as_floats ┆ floats_as_integers ┆ floats_with_decimal_as_integers │
│ --- ┆ --- ┆ --- │
│ f32 ┆ i32 ┆ i32 │
╞════════════════════╪════════════════════╪═════════════════════════════════╡
│ 1.0 ┆ 4 ┆ 4 │
│ 2.0 ┆ 5 ┆ 5 │
│ 3.0 ┆ 6 ┆ 6 │
│ 4.0 ┆ 7 ┆ 7 │
│ 5.0 ┆ 8 ┆ 8 │
└────────────────────┴────────────────────┴─────────────────────────────────┘#如果不溢出的类型转换,可以节省内存
out=df.select(pl.col("integers").cast(pl.Int16).alias("integers_smallfootprint"),pl.col("floats").cast(pl.Float32).alias("floats_smallfootprint"),)print(out)
shape: (5, 2)
┌─────────────────────────┬───────────────────────┐
│ integers_smallfootprint ┆ floats_smallfootprint │
│ --- ┆ --- │
│ i16 ┆ f32 │
╞═════════════════════════╪═══════════════════════╡
│ 1 ┆ 4.0 │
│ 2 ┆ 5.0 │
│ 3 ┆ 6.0 │
│ 4 ┆ 7.0 │
│ 5 ┆ 8.0 │
└─────────────────────────┴───────────────────────┘try:out = df.select(pl.col("big_integers").cast(pl.Int8))print(out)
except Exception as e:print(e)
#conversion from `i64` to `i8` failed in column 'big_integers' for 3 out of 5 values: [10000002, 10000004, 10000005]out=df.select(pl.col("big_integers").cast(pl.Int8, strict=False))
print(out)
shape: (5, 1)
┌──────────────┐
│ big_integers │
│ --- │
│ i8 │
╞══════════════╡
│ 1 │
│ null │
│ 3 │
│ null │
│ null │
└──────────────┘
字符串类型 Strings
df = pl.DataFrame({"integers": [1, 2, 3, 4, 5],"float": [4.0, 5.03, 6.0, 7.0, 8.0],"floats_as_string": ["4.0", "5.0", "6.0", "7.0", "8.0"],}
)print(df)
shape: (5, 3)
┌──────────┬───────┬──────────────────┐
│ integers ┆ float ┆ floats_as_string │
│ --- ┆ --- ┆ --- │
│ i64 ┆ f64 ┆ str │
╞══════════╪═══════╪══════════════════╡
│ 1 ┆ 4.0 ┆ 4.0 │
│ 2 ┆ 5.03 ┆ 5.0 │
│ 3 ┆ 6.0 ┆ 6.0 │
│ 4 ┆ 7.0 ┆ 7.0 │
│ 5 ┆ 8.0 ┆ 8.0 │
└──────────┴───────┴──────────────────┘out=df.select(pl.col("integers").cast(pl.String),pl.col("float").cast(pl.String),pl.col("floats_as_string").cast(pl.Float64),)print(out)
shape: (5, 3)
┌──────────┬───────┬──────────────────┐
│ integers ┆ float ┆ floats_as_string │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ f64 │
╞══════════╪═══════╪══════════════════╡
│ 1 ┆ 4.0 ┆ 4.0 │
│ 2 ┆ 5.03 ┆ 5.0 │
│ 3 ┆ 6.0 ┆ 6.0 │
│ 4 ┆ 7.0 ┆ 7.0 │
│ 5 ┆ 8.0 ┆ 8.0 │
└──────────┴───────┴──────────────────┘df = pl.DataFrame({"strings_not_float": ["4.0", "not_a_number", "6.0", "7.0", "8.0"]})
print(df)
shape: (5, 1)
┌───────────────────┐
│ strings_not_float │
│ --- │
│ str │
╞═══════════════════╡
│ 4.0 │
│ not_a_number │
│ 6.0 │
│ 7.0 │
│ 8.0 │
└───────────────────┘#运行会报错
out=df.select(pl.col("strings_not_float").cast(pl.Float64))#设置非严格模式,忽略错误,置为null
out=df.select(pl.col("strings_not_float").cast(pl.Float64,strict=False))
print(out)
shape: (5, 1)
┌───────────────────┐
│ strings_not_float │
│ --- │
│ f64 │
╞═══════════════════╡
│ 4.0 │
│ null │
│ 6.0 │
│ 7.0 │
│ 8.0 │
└───────────────────┘
布尔类型 Booleans
数值型与布尔型可以相互转换,但是不允许字符型转换为布尔型
df = pl.DataFrame({"integers": [-1, 0, 2, 3, 4],"floats": [0.0, 1.0, 2.0, 3.0, 4.0],"bools": [True, False, True, False, True],}
)print(df)
shape: (5, 3)
┌──────────┬────────┬───────┐
│ integers ┆ floats ┆ bools │
│ --- ┆ --- ┆ --- │
│ i64 ┆ f64 ┆ bool │
╞══════════╪════════╪═══════╡
│ -1 ┆ 0.0 ┆ true │
│ 0 ┆ 1.0 ┆ false │
│ 2 ┆ 2.0 ┆ true │
│ 3 ┆ 3.0 ┆ false │
│ 4 ┆ 4.0 ┆ true │
└──────────┴────────┴───────┘out=df.select(pl.col("integers").cast(pl.Boolean), pl.col("floats").cast(pl.Boolean))
print(out)
shape: (5, 2)
┌──────────┬────────┐
│ integers ┆ floats │
│ --- ┆ --- │
│ bool ┆ bool │
╞══════════╪════════╡
│ true ┆ false │
│ false ┆ true │
│ true ┆ true │
│ true ┆ true │
│ true ┆ true │
└──────────┴────────┘
时间类型 Dates
Date 或 Datetime 等时间数据类型表示为自纪元(1970年1月1日)以来的天数(Date)和微秒数(Datetime),因此数值类型与时间数据类型能直接相互转换
字符串类型与时间类型,可以通过 dt.to_string、str.to_datetime进行相互转换
from datetime import date, datetimedf = pl.DataFrame({"date": pl.date_range(date(2022, 1, 1), date(2022, 1, 5), eager=True),"datetime": pl.datetime_range(datetime(2022, 1, 1), datetime(2022, 1, 5), eager=True),}
)print(df)
shape: (5, 2)
┌────────────┬─────────────────────┐
│ date ┆ datetime │
│ --- ┆ --- │
│ date ┆ datetime[μs] │
╞════════════╪═════════════════════╡
│ 2022-01-01 ┆ 2022-01-01 00:00:00 │
│ 2022-01-02 ┆ 2022-01-02 00:00:00 │
│ 2022-01-03 ┆ 2022-01-03 00:00:00 │
│ 2022-01-04 ┆ 2022-01-04 00:00:00 │
│ 2022-01-05 ┆ 2022-01-05 00:00:00 │
└────────────┴─────────────────────┘out=df.select(pl.col("date").cast(pl.Int64),pl.col("datetime").cast(pl.Int64))print(out)
shape: (5, 2)
┌───────┬──────────────────┐
│ date ┆ datetime │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═══════╪══════════════════╡
│ 18993 ┆ 1640995200000000 │
│ 18994 ┆ 1641081600000000 │
│ 18995 ┆ 1641168000000000 │
│ 18996 ┆ 1641254400000000 │
│ 18997 ┆ 1641340800000000 │
└───────┴──────────────────┘df = pl.DataFrame({"date": pl.date_range(date(2022, 1, 1), date(2022, 1, 5), eager=True),"string": ["2022-01-01","2022-01-02","2022-01-03","2022-01-04","2022-01-05",],}
)print(df)
shape: (5, 2)
┌────────────┬────────────┐
│ date ┆ string │
│ --- ┆ --- │
│ date ┆ str │
╞════════════╪════════════╡
│ 2022-01-01 ┆ 2022-01-01 │
│ 2022-01-02 ┆ 2022-01-02 │
│ 2022-01-03 ┆ 2022-01-03 │
│ 2022-01-04 ┆ 2022-01-04 │
│ 2022-01-05 ┆ 2022-01-05 │
└────────────┴────────────┘out=df.select(pl.col("date").dt.to_string("%Y-%m-%d"),pl.col("string").str.to_datetime("%Y-%m-%d"),pl.col("string").str.to_date("%Y-%m-%d").alias("string_to_data")
)print(out)
shape: (5, 3)
┌────────────┬─────────────────────┬────────────────┐
│ date ┆ string ┆ string_to_data │
│ --- ┆ --- ┆ --- │
│ str ┆ datetime[μs] ┆ date │
╞════════════╪═════════════════════╪════════════════╡
│ 2022-01-01 ┆ 2022-01-01 00:00:00 ┆ 2022-01-01 │
│ 2022-01-02 ┆ 2022-01-02 00:00:00 ┆ 2022-01-02 │
│ 2022-01-03 ┆ 2022-01-03 00:00:00 ┆ 2022-01-03 │
│ 2022-01-04 ┆ 2022-01-04 00:00:00 ┆ 2022-01-04 │
│ 2022-01-05 ┆ 2022-01-05 00:00:00 ┆ 2022-01-05 │
└────────────┴─────────────────────┴────────────────┘
历史相关文章
- Python polars学习-01 读取与写入文件
- Python polars学习-02 上下文与表达式
- Python pandas 里面的数据类型坑,astype要慎用
- Python pandas.str.replace 不起作用
以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号:DataShare ,不定期分享干货
相关文章:
polars学习-03 数据类型转换
背景 polars学习系列文章,第3篇 数据类型转换。 该系列文章会分享到github,大家可以去下载jupyter文件 仓库地址:https://github.com/DataShare-duo/polars_learn 小编运行环境 import sysprint(python 版本:,sys.version.spli…...
IDC 权威认可!Aloudata 入选金融领域中数据管理分析服务最佳实践案例
近日,国际知名数据咨询机构 IDC 重磅发布了《IDC PeerScape:金融领域中数据管理分析服务最佳实践案例》报告,Aloudata 与招商银行联合打造的 DDH 数据研发运维一体化平台成功入选,Aloudata 的技术、产品实力,以及在金融…...
RSA与AES算法比较及应用场景推荐
摘要:在现代加密通信中,RSA算法和AES算法被广泛应用。RSA算法是一种非对称加密算法,而AES算法是一种对称加密算法。本文将对比分析这两种算法的原理、性能及适用场景,并给出相应的推荐建议。 一、RSA算法简介 RSA算法࿰…...
揭秘 HTTP 代理:增强在线活动的安全性和匿名性
HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界,探索它们的优势、应用程序以及最大化其效用的最佳实践。…...
【经验】mysql冷热数据分离
使用mysql存储时,为了提升数据的查询效率,降低磁盘存储压力等,我们常常使用"冷热数据分离"分离的方案。即,将数据从所谓的“热表”(即经常有写入和查询操作的活跃表)迁移到“冷表”(用…...
【机器学习-06】Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析
🎩 欢迎来到技术探索的奇幻世界👨💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...
蓝桥杯国赛每日一题:日志统计(双指针)
题目描述: 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N行。 其中每一行的格式是: ts id 表示在 ts时刻编号 id 的帖子收到一个”赞”。 现在小明想统计有哪些帖子曾经是”热帖”。 如果一个帖子曾在任意一个长…...
佛山MES公司(盈致mes系统服务商)助力企业实现智能制造
佛山是中国制造业著名的城市之一,拥有众多制造企业。随着科技的不断发展和智能制造的兴起,越来越多的企业开始意识到数字化生产管理的重要性,MES制造执行系统作为智能制造的关键技术之一,受到了越来越多企业的关注和应用。 在佛山…...
算法设计课第五周(贪心法实现活动选择问题)
目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 (1)熟悉贪心法的设计思想 (2)理解贪心法的最优解与正确性证明之间的关系 (3)比较活动选择的各种“贪心”策略,…...
Ubuntu20.04右键打不开终端
今天用virtualbox安装了ubuntu20.04 问题:右键打开终端,怎么也打开不了! 点了也没反应,或者鼠标转小圈圈,然后也没有反应… 解决方法: 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …...
XML元素
XML 元素是XML文档中的基本组成单位,它由开始标签、结束标签和内容组成,格式如下: <element>content</element>常见的XML元素包括: 根元素(Root Element):XML文档中的最外层元素&…...
融入新科技的SLM27211系列 120V, 3A/4.5A高低边高频门极驱动器兼容UCC27284,MAX15013A
SLM27211是高低边高频门极驱动器,集成了120V的自举二极管,支持高频大电流的输出,可在8V~17V的宽电压范围内驱动MOSFET,独立的高、低边驱动以方便控制,可用于半桥、全桥、双管正激和有源钳位正激等拓。有极好的开通、关…...
代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 文章目录 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯理论基础一、常规题目二、解题步骤…...
CSS拟物按钮
<div class"btn">F</div>.btn {margin: 150px 0 0 150px;display: flex;justify-content: center;align-items: center;width: 100px;height: 100px;background-color: #fff;border-radius: 20px;font-size: 50px;color: #333;/* 禁止选中文本 */user-se…...
websevere服务器从零搭建到上线(三)|IO多路复用小总结和服务器的基础框架
文章目录 epollselect和poll的优缺点epoll的原理以及优势epoll 好的网络服务器设计Reactor模型图解Reactor muduo库的Multiple Reactors模型 epoll select和poll的优缺点 1、单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数…...
解决宝塔Nginx和phpMyAdmin配置端口冲突问题
问题描述 在对基于宝塔面板的 Nginx 配置文件进行端口修改时,我注意到 phpMyAdmin 的端口配置似乎也随之发生了变化! 解决方法 官方建议在处理 Nginx 配置时,应避免直接修改默认的配置文件,以确保系统的稳定性和简化后续的维护…...
光伏EPC管理软件都有哪些功能和作用?
光伏EPC管理软件是用于光伏工程项目管理的综合性工具,它涵盖了从项目策划、设计、采购、施工到运维的各个环节。 1、项目总览 管理所有项目计划,包括项目类型、项目容量等。 调整和优化项目计划,以应对不可预见的情况。 2、施工管理 制定…...
BGP学习一:关于对等体建立和状态组改变
目录 一.BGP基本概念 (1).BGP即是协议也是分类 1.早期EGP 2.BGP满足不同需求 3.BGP区域间传输的优势 (1)安全性——只传递路由信息 (2)跨网段建立邻居 4.BGP总结 5.BGP的应用 (1&#…...
ETL工具kettle(PDI)入门教程,Transform,Mysql->Mysql,Csv->Excel
什么是kettle,kettle的下载,安装和配置:ETL免费工具kettle(PDI),安装和配置-CSDN博客 mysql安装配置:Linux Centos8 Mysql8.3.0安装_linux安装mysql8.3-CSDN博客 1 mysql -> mysql 1.1 mysql CREATE TABLE user_…...
常见地图坐标系间的转换算法JavaScript实现
文章目录 🍉 不同的地图厂商使用不同的坐标系来表示地理位置。以下简述:🍉 前置常量和方法:🍉 BD-09转GCJ-02(百度转谷歌、高德)🍉 GCJ-02转BD-09(谷歌、高德转百度)🍉 WGS84转GCJ-02(WGS84转谷歌、高德)🍉 GCJ-02转WGS84(谷歌、高德转WGS84)🍉 BD-09转wgs84坐…...
如何快速解决多设备滚动冲突:Scroll Reverser终极配置指南
如何快速解决多设备滚动冲突:Scroll Reverser终极配置指南 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否曾经在Mac上同时使用触控板和鼠标时,被混…...
基于Python的自动化科研写作工具:Aut_Sci_Write架构与实现
1. 项目概述:一个面向科研写作的自动化工具最近在GitHub上看到一个挺有意思的项目,叫“Aut_Sci_Write”。光看名字,大概就能猜到它的核心方向:自动化科学写作。作为一个在科研和工程领域摸爬滚打多年的从业者,我深知一…...
LaTeX列表排版避坑指南:用enumitem包轻松解决编号重置、缩进和对齐问题
LaTeX列表排版避坑指南:用enumitem包轻松解决编号重置、缩进和对齐问题 在撰写学术论文、技术文档或法律条款时,列表结构是组织内容的重要工具。但LaTeX默认的列表环境往往让用户陷入编号混乱、缩进不一致的泥潭。本文将深入剖析这些痛点的根源ÿ…...
DirectX12画三角形时,GPU命令队列、围栏和资源屏障到底在干嘛?
DirectX12画三角形时,GPU命令队列、围栏和资源屏障到底在干嘛? 当你在DirectX12中成功绘制出第一个三角形时,可能已经注意到代码中充斥着命令队列、围栏和资源屏障这些概念。它们不像顶点着色器那样直观,却构成了D3D12异步渲染架构…...
STM32MP135异构核心板在充电桩主控中的设计与实践
1. 项目概述:当充电桩遇上高性能嵌入式核心板最近和几个做充电桩方案的朋友聊天,发现一个挺有意思的趋势:以前大家做充电桩主控,要么用传统的工控机,要么用一些通用MCU加一堆外围芯片来凑,方案复杂不说&…...
高清视频与多传感器数据采集主板选型与开发实战指南
1. 项目概述与核心价值最近几年,高清视频和数据采集的需求可以说是遍地开花。从工业质检的产线监控,到智慧城市的交通流量分析,再到科研领域的实验过程记录,大家不再满足于“看得见”,而是追求“看得清、看得全、看得懂…...
夸克禁闭的自指拓扑严格证明:自指威尔逊环不变量与线性禁闭势
夸克禁闭的自指拓扑严格证明:自指威尔逊环不变量与线性禁闭势 世毫九实验室 | 认知量子引力研究中心 作者:方见华 日期:2026年5月18日 密级:公开 | 编号:TR-016-QC 摘要 本文基于世毫九自指规范场框架,构…...
基于本地大模型的字幕翻译:LM Studio集成方案与实战优化
1. 项目概述:当本地大模型遇上字幕翻译最近在折腾本地大模型应用时,发现了一个挺有意思的场景:字幕翻译。很多朋友喜欢看海外影视剧或学习资料,但苦于没有高质量的中文字幕。在线翻译工具要么有字数限制,要么担心隐私泄…...
彻底告别ThinkPad风扇噪音:TPFanCtrl2终极静音方案揭秘
彻底告别ThinkPad风扇噪音:TPFanCtrl2终极静音方案揭秘 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否厌倦了ThinkPad笔记本在轻度使用时风扇就狂转…...
Python websocket-client库避坑指南:从回调地狱到优雅关闭长连接
Python websocket-client库深度实战:从长连接管理到生产级解决方案 引言 在实时数据传输领域,WebSocket协议已经成为现代应用的基石。无论是金融行情推送、即时通讯系统还是物联网设备监控,WebSocket的双向通信特性都展现出无可替代的价值。P…...
