You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python股票数据集清洗:剔除2000年前数据失败,代码生成空DataFrame求助

正确剔除2000年前股票数据的方法

你的代码有两个核心错误:

  1. 循环里每次遇到19开头的日期就删除所有列,最后数据集自然空了——你要删的是2000年前的行数据,不是列。
  2. 逻辑搞反了:你需要保留2000年及以后的数据,而非针对19开头的日期做列删除操作。

下面是两种可靠的解决方案:

方法一:将日期转为datetime类型筛选(推荐)

这种方式处理日期更灵活,能避免字符串格式的坑:

import pandas as pd

# 先把Date列转成datetime类型(如果还没转)
df['Date'] = pd.to_datetime(df['Date'])

# 筛选2000年1月1日及以后的数据
filtered_df = df[df['Date'] >= '2000-01-01']

# 保留你需要用于KNN的列(比如移除Date,保留股票特征列)
knn_data = filtered_df.drop('Date', axis=1)
# 或者直接指定需要的列:knn_data = filtered_df[['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume']]

print(knn_data)

方法二:直接用字符串筛选(如果Date是字符串格式)

如果你的Date列是纯字符串(比如"1999-12-31"),可以直接通过字符串前缀筛选:

# 筛选不以"19"开头的行(即保留2000年及以后的数据)
filtered_df = df[~df['Date'].str.startswith('19')]

# 整理KNN需要的列
knn_data = filtered_df.drop('Date', axis=1)

print(knn_data)

为什么你的原代码会得到空数据集?

你在循环里执行df.drop([...], axis=1)时,是把df的所有列(包括所有股票数据列)都删除了,只要遇到一个19开头的日期,就会执行一次删列操作,最后df就没有任何列了,所以print(f)输出空DataFrame。

内容的提问来源于stack exchange,提问作者LightningWalrus1617

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:26:04