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

如何用Pandas读取TSV文件并保留UTF-8编码字节字符串类型?

把TSV中的字节字面量字符串转换为真实字节类型

你的问题本质是:TSV文件中存储的不是原生字节数据,而是字节对象的Python字面量字符串(比如"b'La croisi\xc3\xa8re'"这种文本形式),所以Pandas默认会把它读成普通字符串,直接设置dtype={'my_bytestr_col': bytes}是无效的——因为Pandas不知道如何将这种字符串解析为字节对象。

下面给你两种可靠的解决思路:

方法一:读取后批量转换列

使用Python标准库的ast.literal_eval,它可以安全地解析Python字面量(包括字节字符串),比直接用eval()更安全(不会执行恶意代码)。

示例代码:

import pandas as pd
import ast

# 正常读取TSV文件
df = pd.read_csv('your_file.tsv', sep='\t')

# 将目标列的字符串字面量转换为真实字节对象
df['my_bytestr_col'] = df['my_bytestr_col'].apply(ast.literal_eval)

执行完后,df['my_bytestr_col']的类型就会变成bytes,你可以用type(df['my_bytestr_col'].iloc[0])验证。

方法二:读取时直接转换(更高效)

如果想一步到位,在read_csv时使用converters参数,指定列的转换函数,这样读取过程中就会完成转换:

import pandas as pd
import ast

df = pd.read_csv(
    'your_file.tsv',
    sep='\t',
    converters={'my_bytestr_col': ast.literal_eval}
)

处理异常情况

如果你的列中存在格式错误的字面量(比如不是标准的b'xxx'格式),ast.literal_eval会抛出异常。这时候可以写一个带异常处理的自定义函数:

import pandas as pd
import ast

def safe_str_to_bytes(s):
    try:
        return ast.literal_eval(s)
    except (ValueError, SyntaxError):
        # 根据需求处理错误,比如返回空字节、原字符串或NaN
        return b''

df = pd.read_csv(
    'your_file.tsv',
    sep='\t',
    converters={'my_bytestr_col': safe_str_to_bytes}
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:19:49