将字节字面量转换为Pandas DataFrame时遇错误求助
正确将字节字面量数据转换为Pandas DataFrame的方法
错误原因分析
- 直接使用
pd.DataFrame(data_decode)报错:data_decode是JSON格式的字符串,并非DataFrame构造器所需的结构化数据(如列表、字典序列),因此无法直接转换。 - 使用
eval(data_decode)报错:若数据中包含JSON的null值,eval会将其视为未定义的Python变量,导致NameError;同时eval存在安全风险,不建议用于解析JSON数据。
正确方法
方法一:借助json模块解析后转换
先将解码后的JSON字符串转为Python列表(含字典元素),再传入DataFrame构造器:
import json import pandas as pd # 原始字节数据 data = b'[{"Name":"USA Stocks","Code":"US","OperatingMIC":"XNAS, XNYS","Country":"USA","Currency":"USD","CountryISO2":"US","CountryISO3":"USA"},{"Name":"London Exchange","Code":"LSE","OperatingMIC":"XLON","Country":"UK","Currency":"GBP","CountryISO2":"GB","CountryISO3":"GBR"}]' # 解码为字符串 data_decode = data.decode("utf-8") # 解析JSON为Python数据结构 data_json = json.loads(data_decode) # 转换为DataFrame df = pd.DataFrame(data_json)
方法二:直接使用Pandas内置的read_json(更简洁)
pd.read_json可直接处理JSON格式的字节数据或字符串,自动完成解析和转换:
import pandas as pd # 原始字节数据 data = b'[{"Name":"USA Stocks","Code":"US","OperatingMIC":"XNAS, XNYS","Country":"USA","Currency":"USD","CountryISO2":"US","CountryISO3":"USA"},{"Name":"London Exchange","Code":"LSE","OperatingMIC":"XLON","Country":"UK","Currency":"GBP","CountryISO2":"GB","CountryISO3":"GBR"}]' # 直接转换为DataFrame df = pd.read_json(data) # 若已解码为字符串,也可直接传入 # data_decode = data.decode("utf-8") # df = pd.read_json(data_decode)
这两种方法都能正确处理JSON中的null值(自动转为Python的None),且避免了eval的安全问题,是解析JSON数据到DataFrame的标准做法。
内容的提问来源于stack exchange,提问作者prashanth manohar
相关产品推荐
相关产品推荐

