A3. 提示词核心词汇
本章不是词汇表,而是帮你建立「用专业词汇描述任务」的习惯。每个术语都直接嵌入在对应的提示词框中,你在使用提示词的过程中自然习得。
A3.1 数据类型
A3.1.1 为什么数据类型在提示词中最重要
同样是一列数字,"20240101" 可能是字符串,也可能是整数。「把日期列转换成可以计算的格式」让 AI 一头雾水,而「把 date 列从字符串类型(str)转换为 datetime 类型」则让 AI 立刻写出正确代码。
A. 金融数据中的常见类型与陷阱
| 类型名 | Python 写法 | 金融场景示例 | 常见陷阱 |
|---|---|---|---|
| 整数 | int |
成交量 1200000 |
大数字无精度问题 |
| 浮点数 | float |
收盘价 10.52、收益率 0.0132 |
浮点精度误差 |
| 字符串 | str |
股票代码 "000001"、日期 "2024-01-01" |
股票代码必须用字符串,否则前导零丢失 |
| 日期时间 | datetime |
2024-01-15 09:30:00 |
从 CSV 读入后默认是字符串,必须手动转换 |
| 布尔值 | bool |
是否违约 True、是否处理组 False |
有时被存为 0/1 整数 |
| 缺失值 | NaN |
停牌日无成交量 | 计算时会传染,导致整列结果为 NaN |
提示词:读入数据后的第一步——查询并修正数据类型
这是每次读入新数据后必做的操作。养成习惯后,后续绝大多数类型相关的报错都能提前避免。
我用 pandas 读入了一个 CSV 文件,存储在数据框 `df` 中。
列名为:date、stock_code、open、high、low、close、volume、return。
请帮我写代码完成以下任务:
1. 打印数据框的基本信息:行数、列数、每列的数据类型、缺失值数量
2. 将 `date` 列从字符串类型转换为 datetime 类型,
日期格式为 YYYY-MM-DD
3. 将 `stock_code` 列强制转换为字符串类型(避免前导零丢失)
4. 将 `open`、`high`、`low`、`close`、`return` 列转换为 float 类型
5. 将 `volume` 列转换为 int 类型
6. 转换后再次打印每列的数据类型,确认转换成功
如果某列转换失败(如含有非数字的字符串),请用 `errors='coerce'`
将无法转换的值设为 NaN,并打印出有多少行受到影响。
追问模板
上面的类型转换代码运行后,`close` 列转换为 float 时出现了问题,
有 [X] 行被设为了 NaN。
请帮我查找原因:
1. 打印出 `close` 列中所有无法转换为 float 的原始值
2. 分析这些值的规律(如包含逗号、百分号、空格等)
3. 在转换前先做字符串清洗,去除这些异常字符,再重新转换A3.2 数据结构
A3.2.1 最常用的数据结构:数据框
pandas 数据框(DataFrame)是金融数据分析中几乎一切操作的基础。下面是你在提示词中必须用到的术语。
A. 数据框的结构与术语
date stock_code close volume return
0 2024-01-02 600000 10.50 1200000 0.012 ← 行(row)/ 观测
1 2024-01-03 600000 10.80 1500000 0.029
2 2024-01-02 601318 85.20 800000 -0.005
↑ 索引(index) ↑ 列名(column name)
| 术语 | 英文 | 提示词中怎么说 |
|---|---|---|
| 行 / 观测 | row | 「每行是一只股票某天的数据」 |
| 列 / 变量 | column | 「close 列」、「收盘价列」 |
| 索引 | index | 「重置索引」、「以 date 为索引」 |
| 子集 | subset / slice | 「筛选出 industry 为银行的行」 |
| 分组 | groupby | 「按 stock_code 分组」 |
| 聚合 | aggregate | 「对每组计算均值」 |
| 合并 | merge / join | 「按 stock_code 和 date 左连接两个数据框」 |
| 拼接 | concat | 「将多个数据框纵向拼接」 |
| 长格式 | long format | 「每行是一个股票在某天的数据」 |
| 宽格式 | wide format | 「行为日期,列为股票代码,值为收盘价」 |
| 透视 | pivot / melt | 「长格式转宽格式」、「宽格式转长格式」 |
| 缺失值 | NaN / missing | 「close 列有缺失值」 |
| 重复行 | duplicate | 「删除重复的股票-日期组合」 |
| 异常值 | outlier | 「return 列有极端异常值」 |
提示词:数据框的核心操作速查
这组提示词将最常用的 6 类数据框操作集中在一起,可按需拆分单独使用。
我有一个 pandas 数据框 `df`,面板数据格式(每行是一只股票某天的数据),
包含以下列:
- date:datetime 类型的日期
- stock_code:字符串类型的股票代码
- close:浮点数类型的收盘价
- volume:整数类型的成交量
- industry:字符串类型的行业分类
请分别写代码实现以下操作,每个操作独立一段代码,附中文注释:
1. 【筛选行】保留 industry 为「银行」且 close 大于 10 的行
2. 【选取列】只保留 date、stock_code、close 三列,存为新数据框 `df_sub`
3. 【排序】按 date 升序、close 降序排列
4. 【分组聚合】按 industry 分组,计算每个行业的平均收盘价和总成交量
5. 【新增列】新增列 `log_return`,值为 close 列的日对数收益率
(公式:ln(close_t / close_{t-1}),需要按 stock_code 分组后计算)
6. 【格式转换】将长格式转换为宽格式:
行为 date,列为 stock_code,值为 close
追问模板
第 5 步计算 log_return 的代码有问题:
每只股票的第一个交易日的 log_return 应该是 NaN(因为没有前一天的数据),
但现在显示的是 [描述实际结果]。
请检查代码,确保:
1. 对数收益率是在每只股票内部按时间顺序计算的(不跨股票)
2. 每只股票的第一行 log_return 为 NaN
3. 打印前 5 行验证结果A3.3 常用库速查
写提示词时明确指定使用哪个库,AI 生成的代码风格会更一致,不同来源的代码之间也更容易混用。
| 任务 | 推荐库 | 提示词关键词 |
|---|---|---|
| 数据处理 | pandas |
「使用 pandas」 |
| 数值计算 | numpy |
「使用 numpy」 |
| 统计绘图 | matplotlib + seaborn |
「用 seaborn 基于 matplotlib 绘图」 |
| 交互式图形 | plotly |
「使用 plotly 生成交互式图表」 |
| 统计建模 | statsmodels |
「使用 statsmodels 的 OLS 模块」 |
| 机器学习 | scikit-learn |
「使用 scikit-learn」 |
| 美股数据 | yfinance |
「用 yfinance 下载 Yahoo Finance 数据」 |
| Wind 数据 | WindPy |
「通过 WindPy 的 w.wsd 函数获取数据」 |
| 进度条 | tqdm |
「用 tqdm 显示循环进度条」 |
| 表格美化 | tabulate |
「用 tabulate 格式化输出表格」 |
| 报告导出 | openpyxl |
「用 openpyxl 写入 Excel 文件」 |