python - 极地 : switching between dtypes within a Da

我正在尝试搜索是否有一种方法可以轻松更改带数字的字符串的数据类型。比如我面临的问题如下:

df = pl.Dataframe({"foo": ["100CT pen", "pencils 250CT", "what "125CT soever", "this is a thing"]})

我可以提取并创建一个名为 {"bar": ["100", "250", "125", ""]} 的新列。但是后来我找不到一个方便的函数来将此列转换为 Int64 或 float dtypes,以便结果为 [100, 250, 125, null]。

反之亦然。有时使用一个方便的函数将 [100, 250, 125, 0] 列转换为 ["100", "250", "125", "0"] 会很有用。它是已经存在的东西吗?

谢谢!

最佳答案

完成此操作的最简单方法是使用 cast表达。

字符串转整数/ float

将字符串转换为整数(或 float ):

import polars as pl

df = pl.DataFrame({"bar": ["100", "250", "125", ""]})
df.with_column(pl.col('bar').cast(pl.Int64, strict=False).alias('bar_int'))
shape: (4, 2)
┌─────┬─────────┐
│ bar ┆ bar_int │
│ --- ┆ ---     │
│ str ┆ i64     │
╞═════╪═════════╡
│ 100 ┆ 100     │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ 250 ┆ 250     │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ 125 ┆ 125     │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│     ┆ null    │
└─────┴─────────┘

一个方便的可用数据类型列表是 here .这些都是 polars 下的别名,因此您可以轻松引用它们(例如,pl.UInt64)。

对于您描述的数据,我建议使用 strict=False 以避免在数百万条记录中有一个错误的数字导致异常停止一切。

整数/ float 转字符串

可以使用相同的过程将数字转换为字符串 - 在本例中为 utf8 数据类型。

让我稍微修改一下您的数据集:

df = pl.DataFrame({"bar": [100.5, 250.25, 1250000, None]})
df.with_column(pl.col("bar").cast(pl.Utf8, strict=False).alias("bar_string"))
shape: (4, 2)
┌────────┬────────────┐
│ bar    ┆ bar_string │
│ ---    ┆ ---        │
│ f64    ┆ str        │
╞════════╪════════════╡
│ 100.5  ┆ 100.5      │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 250.25 ┆ 250.25     │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 1.25e6 ┆ 1250000.0  │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ null   ┆ null       │
└────────┴────────────┘

如果您需要对格式进行更多控制,可以使用 apply 方法和 Python 的新 f 字符串格式。

df.with_column(
    pl.col("bar").apply(lambda x: f"This is ${x:,.2f}!").alias("bar_fstring")
)
shape: (4, 2)
┌────────┬────────────────────────┐
│ bar    ┆ bar_fstring            │
│ ---    ┆ ---                    │
│ f64    ┆ str                    │
╞════════╪════════════════════════╡
│ 100.5  ┆ This is $100.50!       │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 250.25 ┆ This is $250.25!       │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 1.25e6 ┆ This is $1,250,000.00! │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ null   ┆ null                   │
└────────┴────────────────────────┘

我找到了 this web page对于那些不熟悉 f 字符串格式的人来说,这是一个方便的引用。

关于python - 极地 : switching between dtypes within a DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71790235/

相关文章:

swift - 如何快速制作圆形或填充和圆形进度 View (使用 CAShapeLayers)

c++ - const char * 数组中的元素数

r - 根据 R 中的出生年份对人员进行分组

awk - 如果模式存在于另一列中,则从该列中移除模式

r - 如何创建一个虚拟变量对应于 R 中值的变化

c++ - 键入 “$” 命令不会跳转到行尾 [光标设置为 “|”(条形/管道)而不是 block

rust - 为什么使用盒装对象而不是特征对象?

r - 与另一列中的变量相比,如何找到 R 列中两两变量之间的共同变量数?

linux - 使用打印命令选择子域

r - 如何在数据帧的特定索引中插入行,其中仅在 R pipe dplyr 中包含上面几行的总和