在 Polars 中轻松将字符串列转换为 pl.datetime

2024-01-02

考虑一个带有一列的 Polars 数据框str表示日期格式的类型'27 July 2020'。我想将此列转换为polars.datetime类型,与Python标准不同datetime。以下代码,使用标准datetime格式有效,但 Polars 无法将列中的值识别为日期。

import polars as pl
from datetime import datetime

df = pd.read_csv('<some CSV file containing a column called 'event_date'>')
df = df.with_columns([   
        pl.col('event_date').apply(lambda x: x.replace(" ","-"))\
                            .apply(lambda x: datetime.strptime(x, '%d-%B-%Y'))
])

假设我们尝试处理df进一步创建一个新列,指示事件发生的季度。

df = df.with_columns([
        pl.col('event_date').apply(lambda x: x.month)\
                            .apply(lambda x: 1 if x in range(1,4) else 2 if x in range(4,7) else 3 if x in range(7,10) else 4)\
                            .alias('quarter')
])

该代码返回以下错误,因为它符合event_type as dtype Object("object")而不是作为datetime or polars.datetime

thread '<unnamed>' panicked at 'dtype Object("object") not supported', src/series.rs:992:24
--- PyO3 is resuming a panic after fetching a PanicException from Python. ---
PanicException: Unwrapped panic from Python code

Update: .str.to_datetime() https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.Expr.str.to_datetime.html#polars.Expr.str.to_datetime可以像极地一样使用v0.17.10 https://github.com/pola-rs/polars/releases/tag/py-0.17.10

df = pl.from_repr("""
┌─────┬──────────────────┐
│ id  ┆ event_date       │
│ --- ┆ ---              │
│ i64 ┆ str              │
╞═════╪══════════════════╡
│ 1   ┆ 27 July 2020     │
│ 2   ┆ 31 December 2020 │
└─────┴──────────────────┘
""")

df.with_columns(
   pl.col("event_date").str.to_datetime("%d %B %Y")
)
shape: (2, 2)
┌─────┬─────────────────────┐
│ id  ┆ event_date          │
│ --- ┆ ---                 │
│ i64 ┆ datetime[μs]        │
╞═════╪═════════════════════╡
│ 1   ┆ 2020-07-27 00:00:00 │
│ 2   ┆ 2020-12-31 00:00:00 │
└─────┴─────────────────────┘

将字符串转换为日期/日期时间的最简单方法是使用 Polars 自己的strptime https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.Expr.str.strptime.html函数(而不是 Python 中的同名函数)datetime模块)。

例如,让我们从这个数据开始。

import polars as pl

df = pl.DataFrame({
    'date_str': ["27 July 2020", "31 December 2020"]
})
print(df)
shape: (2, 1)
┌──────────────────┐
│ date_str         │
│ ---              │
│ str              │
╞══════════════════╡
│ 27 July 2020     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 31 December 2020 │
└──────────────────┘

要转换,请使用 Polarsstrptime https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.Expr.str.strptime.html功能。

df.with_columns(pl.col('date_str').str.strptime(pl.Date, fmt='%d %B %Y').cast(pl.Datetime))
shape: (2, 1)
┌─────────────────────┐
│ date_str            │
│ ---                 │
│ datetime[μs]        │
╞═════════════════════╡
│ 2020-07-27 00:00:00 │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 2020-12-31 00:00:00 │
└─────────────────────┘

请注意,我们不需要用破折号替换空格。我已将结果转换为日期时间(根据您的问题),但您也许可以使用日期。

目前,apply当返回类型是 python Date/Datetime 对象时该方法不起作用,但是有一个request https://github.com/pola-rs/polars/issues/3022为了这。也就是说,最好使用 Polarsstrptime。会比调用python快很多datetime code.

Edit:截至极地0.13.19, the apply方法会自动将Python日期/日期时间转换为Polars日期/日期时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Polars 中轻松将字符串列转换为 pl.datetime 的相关文章

随机推荐

  • 单击时,循环遍历每个对象键

    我还在学习 JS 有些东西比其他人更难理解 就像这样 我试图通过允许用户单击自定义按钮来更改谷歌地图的主题 我正在使用 if else 效果很好 但我想添加更多主题并使用循环 用户每次单击时 都会选择 object key 0 then c
  • 从 C++ 调用 DLL 中的函数

    我在 VS 2008 中有一个解决方案 其中有 2 个项目 一个是用 C 编写的 DLL 另一个是从空白项目创建的简单 C 控制台应用程序 我想知道如何从应用程序调用 DLL 中的函数 假设我从一个空白的 C 项目开始 并且我想调用一个名为
  • 打印所有定义的变量和值

    这只是为我提供了已定义变量的数组 但没有打印出任何变量 我怎样才能打印值 另外我可以使用什么函数以这种格式输出所有定义的变量 变量名称 变量类型 int array string bool 在线定义变量 脚本中定义的变量 使用次数可变 变量
  • 了解并发.futures.Executor.map()

    我正在尝试使用进程并行化一些Python代码concurrent futures https docs python org 3 library concurrent futures html 看起来我可以通过以下方式多次并行执行一个函数提
  • Windows 服务启动/停止另一个服务

    我用 C 编写的服务有一个小问题 该服务本身运行正常并且在 SYSTEM 帐户下运行 在一个执行点期间 我必须启动或停止另一项服务 然而 这是行不通的 致电给OpenService 返回错误代码 5 即 访问被拒绝 提供更多细节 我必须启动
  • 列表到字典

    我有一个List
  • 如何在 SQL Server 中选择连续重复项

    我想从 SQL Server 表中选择重复的条目 但前提是 id 是连续的 我一直在努力扭转这个答案 https stackoverflow com a 3298645 1778169满足我的需要 但我无法让它工作 上面的答案是针对Orac
  • AudioKit - 如何从麦克风获取实时 floatChannelData?

    我是 Audiokit 的新手 我正在尝试对来自麦克风的输入音频进行一些实时数字信号处理 我知道我想要的数据在AKAudioFile的FloatChannelData中 但是如果我想实时获取这个数据怎么办 我目前正在使用 AKMicroph
  • 通过门户从 Azure Cosmos DB 删除所有/多个文档

    是否可以通过 azure 门户 Azure cosmos SQL 查询或 power shell 脚本删除集合中的所有 多个可用文档 根据我的经验 删除所有文档的最快方法是将容器上的 生存时间 设置为 1 秒 这将删除所有文档 但请注意 此
  • 验证 CSS 选择器

    有没有办法以编程方式检查 javascript jquery 选择器的有效性 like class还好但是 class is not 以 JavaScript 或任何后端语言编程 除了通过 jQuery 源代码 所以在伪代码中 def se
  • Maven2 和 Swing 项目:构建并运行 swing 应用程序

    我试图找到有关如何使用 Maven 构建和运行 swing 应用程序的信息 但找不到任何有用的信息 maven 文档一团糟 有人可以指出我相关的文档吗 有人在 Swing 开发中使用 Maven 吗 我猜您想从 Maven 命令运行您的应用
  • 控制 Facebook iFrame 应用程序父框架的滚动位置

    我已经有一个 Facebook iFrame 应用程序愉快地启动并运行 但我意识到由于跨域问题 我没有办法处理父框架的滚动位置 如果用户在页面上点击太远 我无法将它们弹出到顶部 有没有人有幸使用 Facebook JS 库或其他 JavaS
  • 如何更改内容安全策略指令以允许 addThis 小部件?

    我正在制作一个使用 webpack 的网站 我正要启动它并且我想穿上addThis分享小部件 我正在添加addThis代码在index html按照建议关闭正文标签之前addThis 像这样 这会在 chrome inspect 控制台中生
  • 如何以编程方式为 WCF 服务设置单个端点

    我试图允许用户配置 WCF 服务 包括该服务侦听的 IP 和端口号 用户有一个单独的配置应用程序 允许设置这些值 但我遇到的问题是 app config 必须定义一个端点才能创建新的 ServiceHost 条目 但我的端点正在被在单独的配
  • 在负载均衡器后面运行 daphne 的多个实例:django-channels

    我在用django channels to add HTTP2 WebSocket支持我的申请 我找不到很多关于如何扩展通道的文档 下面是我的nginx负载平衡多个实例的配置daphne运行在同一台机器但不同的端口上 这是正确的方法吗 up
  • 有没有办法创建私人频道的 SharePoint 网站?

    目前 我们在使用 teams 图形 API 端点创建的团队上创建私有频道时遇到问题 从 Graph API 添加专用通道时 不会配置与该通道关联的 SharePoint 网站 用户需要访问 MSTeams 客户端中的 文件 选项卡才能创建站
  • 定义常量变量的最佳方法是什么 python 3 [重复]

    这个问题在这里已经有答案了 我正在用 python 编写一个程序 其中包含许多常量变量 我想创建一个文件来保存所有这些变量 例如 h文件输入C其中包含许多 define 我尝试使用配置解析器 https docs python org 3
  • 从 XElement 中删除属性

    我正在尝试从 xml 文档中删除一些属性 这是我尝试过的 private void RemoveEmptyNamespace XElement element foreach XElement el in element Elements
  • 为什么 to_json 在 Rails 4 中自动转义 unicode?

    Rails 3 a gt br to json gt a br Rails 4 a gt br to json gt a u003Cbr u003E WHY 它似乎导致了错误 Encoding UndefinedConversionErro
  • 在 Polars 中轻松将字符串列转换为 pl.datetime

    考虑一个带有一列的 Polars 数据框str表示日期格式的类型 27 July 2020 我想将此列转换为polars datetime类型 与Python标准不同datetime 以下代码 使用标准datetime格式有效 但 Pola