如何将Pandas读取CSV得到的字符串转为原始字节供np.frombuffer使用
解决方案
方法1:使用ast.literal_eval(通用安全方案)
该方法可直接解析Python字面量格式的转义字符串,无需手动处理转义规则,安全性远高于原生eval,适合格式不固定的转义字节串场景。
示例代码:
import ast import numpy as np # 从DataFrame中取出转义字符串 data = df.data[x] # 解析为原始字节 raw_bytes = ast.literal_eval(f"b'{data}'") # 转换为numpy数组 v = np.frombuffer(raw_bytes, dtype=np.uint8) print(v) # 输出 array([0, 0], dtype=uint8)
如果字符串中可能包含单引号,可改用双引号包裹:
raw_bytes = ast.literal_eval(f'b"{data}"')
方法2:使用bytes.fromhex(高性能批量处理方案)
如果你的字节串固定为\x加两位十六进制的格式,可以先移除所有\x标记得到纯十六进制字符串,再直接转换为字节,该方法处理速度更快,适合大体积数据批量转换。
示例代码:
import numpy as np data = df.data[x] # 移除所有\x标记,得到纯十六进制串 hex_str = data.replace(r'\x', '') # 转换为原始字节 raw_bytes = bytes.fromhex(hex_str) # 转换为numpy数组 v = np.frombuffer(raw_bytes, dtype=np.uint8) print(v) # 输出 array([0, 0], dtype=uint8)
两种方案都可以将你示例中的转义字符串\x00\x00转为原始字节b'\x00\x00',最终得到目标uint8数组。
内容的提问来源于stack exchange,提问作者Jorge García
相关产品推荐
相关产品推荐

