**第二天:数据清洗魔法**
0 W/ i; P# s& ?6 V) K& p---
( A5 A- H% G& f: m5 v2 ^, D**痛点直达**
4 a" A3 j) c/ s手动处理股票数据崩溃?VLOOKUP卡死?缺失值像地雷一碰就炸?7 G% S- ^ u5 m# f
---1 a- c; o/ X- k& @+ y, d* q
**核心代码**; H) @- C/ Q" g# i3 }/ }/ G) s. U. h
```python
- @3 Z* _- d4 l% k( `5 P& ]& {, ^% yimport pandas as pd9 Z$ J8 d' r/ E* [3 d/ X/ O
# 魔法①:混乱日期一键转换(自动识别20230101/2023-1-1等格式)
/ Z; Y. F) M7 m' T6 ^) I9 Gdf["交易日期"] = pd.to_datetime(df["交易日期"], errors="coerce")
: `5 g0 x, V1 b# 魔法②:合并主力资金+大盘数据(彻底告别VLOOKUP)
8 W; Z7 g. Q8 R& n' smerged_df = pd.merge(
& a" I& r3 s7 K- C* ipd.read_csv("主力资金.csv"),2 m/ s9 d: b4 U$ ?, D
pd.read_csv("沪深300.csv"),
7 P0 y( ?! G! P8 A8 T2 M- uon="日期",/ `. k1 N: i3 z% Z: u: U' M
how="inner" # 自动对齐日期,缺失数据直接剔除
0 l) n8 s/ m+ A! A: [. a s)
v- y( P5 S6 G5 d# 魔法③:智能填充缺失值(向前填充→向后填充双保险); y) j2 g8 l% L5 |& x0 Q J
clean_df = merged_df.ffill().bfill()
2 e$ p6 V$ W$ w4 _% y8 J```( @3 B$ f2 Q& G6 d5 H
---
, X3 @9 u! e6 R/ ?**避坑指南**1 F+ a7 g1 M& f( g4 [' @7 h4 a, Z
1. **中文列名报错**:8 K$ E/ R7 e6 @6 A, f7 ~2 Z. H
```python
$ z, q* ~* O6 ?: H# 将中文列名改为英文(如‘date’替代‘日期’)$ K$ E( u v/ ^% X4 T0 t) T
df.rename(columns={"日期":"date"}, inplace=True)2 C8 ^8 T% X0 x6 \$ w
```
: [5 P" w$ q; @- i* w2. **内存爆炸**:
+ ] i. t% a6 l. s4 @```python) P% Z. I$ i6 T! c0 Y, W! w
# 压缩数据体积(成交量列从int64转为int32)
" j$ C6 q& S. Rdf["成交量"] = df["成交量"].astype("int32")# ]( R% F2 z$ l5 O- G0 f
```- K7 t8 l. Y- W8 T( X
3. **速度优化**:3 [! Z" `1 t$ F* ^) V4 S$ ?
```python
+ |& o" \7 {& q1 {& }# 加速10倍的核心配置
) Z2 K6 u, l6 V* D5 l6 g8 m) @pd.set_option('mode.chained_assignment', None) # 关闭警告: E& S1 y' j& r1 I+ Q0 K! }
```
5 {: e _) ~4 e---" q/ Q3 x8 m% @% g( `9 O
**明日解锁**
$ X o" R0 V }8 _9 H/ {“通达信OUT!用3行代码生成MACD/KDJ,自动标记买卖信号!” |