如何处理网页爬取DataFrame的日期格式并正确导出至CSV
解决方案
不需要额外使用csv模块,用Pandas自带的方法就能彻底解决问题。核心问题是你直接把Series对象转成字符串写入文件,既没处理日期格式,也没遵循CSV的分隔逻辑。
1. 修改数据清洗函数,转换日期格式并重置索引
在clean_dividends函数中,先把日期转换成MM-DD-YYYY格式,再将索引列转为普通列,确保导出时日期和股息各占一列:
def clean_dividends(symbol, dividends): index = len(dividends) dividends = dividends.drop(index-1) # 删除最后一行无效数据 # 关键:将原始日期格式转为MM-DD-YYYY,去掉逗号 dividends['Date'] = pd.to_datetime(dividends['Date']).dt.strftime('%m-%d-%Y') dividends = dividends.set_index('Date') dividends = dividends['Dividends'] dividends = dividends.str.replace('\\Dividend', '', regex=True) dividends = dividends.astype(float) dividends.name = symbol # 重置索引,把日期从索引变回普通列 dividends = dividends.reset_index() return dividends
2. 用Pandas的to_csv方法导出CSV
替换原来手动写入文件的代码,to_csv会自动处理分隔符,避免因逗号导致的列错位:
# 替换原文件写入代码 csv_path = f"{ticker}_div_hist.csv" if os.path.exists(csv_path): os.remove(csv_path) # 导出CSV,index=False避免生成额外的索引列 clean_div.to_csv(csv_path, index=False)
效果说明
- 日期转换:
pd.to_datetime(...).dt.strftime('%m-%d-%Y')将Nov 04, 2022转为11-04-2022,既去掉了逗号,又符合你需要的格式。 - 重置索引:把日期从行索引转为普通列,确保导出后有明确的两列:Date和股息值。
to_csv方法:自动用逗号分隔列,且会正确处理内容中的特殊字符,不会出现列错位问题。
最终导出的CSV结构如下:
Date,C 11-04-2022,0.51 07-29-2022,0.51 04-29-2022,0.51 02-04-2022,0.51
内容的提问来源于stack exchange,提问作者user14894283
相关产品推荐
相关产品推荐

