You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas读写CSV后字节串变为带b前缀字符串的解决方案问询

解决方案

问题根因:CSV为纯文本格式,不支持原生存储二进制字节类型,Pandas写入时会自动将字节对象转为带b''标识的repr字符串,读取时即使指定dtype=bytes也只会将整段字符串转为字节,因此会出现b"b'hey'"的双层前缀问题。以下是三种无需手动去除b前缀的可行方案:

方案1:使用ast字面量解析(适用于必须使用CSV的场景)

利用ast.literal_eval安全解析字符串形式的Python字面量,直接将"b'hey'"格式的字符串转为原生字节对象:

import pandas as pd
import ast

# 读取CSV后处理目标列
df = pd.read_csv("your_file.csv")
df["COLUMN_NAME"] = df["COLUMN_NAME"].apply(ast.literal_eval)

该方案无需修改写入逻辑,仅需在读取后增加一行处理,自动适配所有合法的字节字面量格式,包括带转义字符的字节串。

方案2:Base64编码转码(适用于必须使用CSV、且字节内容存在特殊字符的场景)

写入前将字节串转为Base64编码的纯ASCII字符串,读取后再解码回字节,完全规避repr字符串的解析问题:

import pandas as pd
import base64

# 写入前处理
df["COLUMN_NAME"] = df["COLUMN_NAME"].apply(base64.b64encode).str.decode("ascii")
df.to_csv("your_file.csv", index=False)

# 读取后处理
df = pd.read_csv("your_file.csv")
df["COLUMN_NAME"] = df["COLUMN_NAME"].apply(base64.b64decode)

方案3:更换为支持二进制类型的存储格式(最优方案,无需额外转换)

如果业务允许不使用CSV,直接选择Parquet、Pickle等支持原生存储二进制类型的格式,读写全程不需要做额外字段处理,也不会出现类型丢失问题:

import pandas as pd

# 写入Parquet格式
df.to_parquet("data.parquet", index=False)
# 读取Parquet格式,字节列会自动保留原生类型
df = pd.read_parquet("data.parquet")

该方案性能、存储空间占用都优于CSV,优先推荐场景允许时使用


内容的提问来源于stack exchange,提问作者Quasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:15:02