我在用Python操作包含非UTF-8字符的数据集时遇到困难.字符串作为二进制导入. 但我在将二进制列转换为单元格包含非UTF-8字符的字符串时遇到了问题.

我的问题的一个最低工作示例是

import polars as pl
import pandas as pd

pd_df = pd.DataFrame([[b"bob", b"value 2", 3], [b"jane", b"\xc4", 6]], columns=["a", "b", "c"])
df = pl.from_pandas(pd_df)

column_names = df.columns

# Loop through the column names
for col_name in column_names:
    # Check if the column has binary values
    if df[col_name].dtype ==pl.Binary:
        # Convert the binary column to string format
        print(col_name)
        df = df.with_columns(pl.col(col_name).cast(pl.String))

这在转换b列时会引发错误. 作为解决方案,我很好将任何非utf 8字符转换为空白.

我在在线建议中try 过许多其他转换建议,但我无法让其中任何一个发挥作用.

推荐答案

该解决方案还依赖于将Python的原生bytes.decode应用于类型pl.Binary的列中的所有元素.不幸的是,我们还无法为此使用polars的原生表达API,而是需要调用pl.Expr.map_elements.

df.with_columns(
    pl.col(pl.Binary).map_elements(
        lambda bytes: bytes.decode(errors='ignore'),
        return_dtype=pl.String
    )
)
shape: (2, 3)
┌──────┬─────────┬─────┐
│ a    ┆ b       ┆ c   │
│ ---  ┆ ---     ┆ --- │
│ str  ┆ str     ┆ i64 │
╞══════╪═════════╪═════╡
│ bob  ┆ value 2 ┆ 3   │
│ jane ┆         ┆ 6   │
└──────┴─────────┴─────┘

Python相关问答推荐

大Pandas 胚胎中产生组合

在Python Attrs包中,如何在field_Transformer函数中添加字段?

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

在Python中管理打开对话框

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

Python中绕y轴曲线的旋转

当独立的网络调用不应该互相阻塞时,'

将输入聚合到统一词典中

在pandas中使用group_by,但有条件

移动条情节旁边的半小提琴情节在海运

如何在TensorFlow中分类多个类

使用Python查找、替换和调整PDF中的图像'

基于多个数组的多个条件将值添加到numpy数组

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

并行编程:同步进程

我对这个简单的异步者的例子有什么错误的理解吗?

在用于Python的Bokeh包中设置按钮的样式

有没有办法在不先将文件写入内存的情况下做到这一点?

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?