我试图搜索是否有一种方法可以轻松更改带有数字的字符串的数据类型。例如,我面临的问题如下:
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"]
会很有用。它是已经存在的东西吗?
当然可以!以下是如何使用 Polars 实现这一点:
1. 从字符串中提取数字并转换为 Int64/Float64:
import polars as pl
df = pl.DataFrame({"foo": ["100CT pen", "pencils 250CT", "what 125CT soever", "this is a thing"]})
df = df.with_columns(
pl.col("foo").str.extract(r"(\d+)").cast(pl.Int64).alias("bar")
)
print(df)
此代码将执行以下操作:
-
str.extract(r"(\d+)")
: 此操作使用正则表达式r"(\d+)"
从 "foo" 列中提取第一个匹配的数字字符串。\d+
匹配一个或多个数字。 -
.cast(pl.Int64)
: 这会将提取的字符串值转换为 Int64 数据类型。如果需要 Float64,请使用pl.Float64
。
2. 将数字列转换为字符串列:
df = df.with_columns(pl.col("bar").cast(pl.Utf8).alias("bar_str"))
print(df)
此代码执行以下操作:
-
.cast(pl.Utf8)
: 这会将 "bar" 列(包含数字)转换为字符串数据类型(Utf8)。
汇总:
可以组合这些操作以实现的目标:
df = pl.DataFrame({"foo": ["100CT pen", "pencils 250CT", "what 125CT soever", "this is a thing"]})
# 提取数字并转换为整数
df = df.with_columns(
pl.col("foo").str.extract(r"(\d+)").cast(pl.Int64).alias("bar")
)
# 可选:将整数列转换回字符串
df = df.with_columns(pl.col("bar").cast(pl.Utf8).alias("bar_str"))
print(df)
这将为提供一个包含原始 "foo" 列、提取的数字 "bar" 列以及 "bar" 的字符串表示形式的 "bar_str" 列的数据帧。
标签:python,python-polars From: 71790235