3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在本地环境(如 PyCharm + Python 3.8)使用 JQData SDK 时,query 语句中的 label() 方法底层依赖于 SQLAlchemy 来构建 SQL 查询。如果在 label() 中使用中文字符导致运行失败,通常是因为底层的数据库驱动或 SQL 编译器在处理非 ASCII 字符的列别名(Alias)时出现了编码兼容性问题。
虽然在聚宽官网的在线研究环境中可能做了特定的环境适配允许使用中文 label,但在本地环境中,最稳妥且最推荐的工程实践是:在 SQL 查询阶段使用英文字段名,在获取到 Pandas DataFrame 后再进行中文重命名。
rename 方法建议在 query 中保持英文 label,然后利用 Pandas 强大的数据处理能力将列名修改为中文。这不仅能彻底避开底层数据库驱动的编码问题,还能让代码更具可移植性。
修改后的代码示例:
import pandas as pd
from jqdatasdk import *
# 1. 在 query 中使用英文 label(或直接使用默认字段名)
q = query(
indicator.code,
indicator.operating_profit.label('get_operating_profit'),
(income.total_operating_revenue - income.total_operating_cost).label('my_operating_profit')
).filter(
indicator.code == '600507.XSHG'
)
# 2. 获取数据
df = get_fundamentals(q)
# 3. 使用 Pandas 的 rename 方法将列名修改为中文
df.rename(columns={
'code': '股票代码',
'get_operating_profit': '营业利润',
'my_operating_profit': '自定义营业利润'
}, inplace=True)
print(df)
如果您确实希望在初始环境中排查中文编码问题,可以检查以下几点:
# -*- coding: utf-8 -*-
UnicodeEncodeError。请检查 PyCharm 的 File Encodings 设置,确保 Global Encoding 和 Project Encoding 均设置为 UTF-8。jqdatasdk 是最新版本(可通过 pip install -U jqdatasdk 升级),以获取官方最新的底层修复。总结来说,SQL 查英文 + Pandas 转中文 是量化数据处理中最标准、最不易出错的流程,强烈建议采用此方式。