基于Pandas处理Fyers Websocket数据:提取指定字段至DataFrame
解决方案
问题核心
你写入文件的是Python字典/列表字面量格式(使用单引号、遵循Python语法),而非标准JSON(强制双引号、严格格式规范),所以json.loads无法正常解析。
方案1:从源头写入标准JSON(推荐)
修改你的custom_message函数,用json.dumps把Python对象转换成标准JSON字符串再写入,后续可直接用JSON工具解析:
import json def custom_message(msg): with open('NSE_JSON.csv', 'a') as g: json_str = json.dumps(msg) g.write(json_str + "\n")
用
with语句自动管理文件关闭,比手动调用close()更安全可靠。
方案2:解析已有的Python字面量格式文件
如果已经生成了非标准格式的文件,使用ast.literal_eval安全解析每行的Python字面量,再提取目标字段生成DataFrame:
import ast import pandas as pd data = [] # 逐行读取并解析文件 with open('NSE_JSON.csv', 'r') as f: for line in f: line = line.strip() if not line: continue # 将行内容解析为Python列表/字典 msg_data = ast.literal_eval(line) # 提取所需字段(注意msg_data是列表,取第一个元素) timestamp = msg_data[0]['timestamp'] vol_traded_today = msg_data[0]['vol_traded_today'] data.append({'timestamp': timestamp, 'vol_traded_today': vol_traded_today}) # 生成Pandas DataFrame df = pd.DataFrame(data) print(df.head())
为什么用ast.literal_eval?
它能安全解析Python的字面量结构(列表、字典、数字、字符串等),比原生eval()更安全,不会执行潜在恶意代码,完美适配当前的文件格式。
内容的提问来源于stack exchange,提问作者Mintoo
相关产品推荐
相关产品推荐

