Python股票数据集清洗:剔除2000年前数据失败,代码生成空DataFrame求助
正确剔除2000年前股票数据的方法
你的代码有两个核心错误:
- 循环里每次遇到19开头的日期就删除所有列,最后数据集自然空了——你要删的是2000年前的行数据,不是列。
- 逻辑搞反了:你需要保留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
相关产品推荐
相关产品推荐

