如何将Pandas DataFrame中最后一条非空行写入CSV文件?
解决方法
要实现仅保留每只股票最后一条PbRatios非空的记录,核心是先过滤掉空值,再取最新日期的记录——你之前直接取最大日期的方式失效,是因为该日期对应的PbRatios恰好为空。
修改后的代码如下:
import pandas as pd from yahooquery import Ticker symbols = ['AAPL','GOOG','MSFT','NVDA'] header = ["asOfDate","PbRatio"] # 第一次执行时写入表头 with open('output.csv', 'w') as f: f.write(','.join(header) + '\n') for tick in symbols: faang = Ticker(tick) df = faang.valuation_measures if df is None or df.empty: continue # 确保所需列存在,不存在则设为None for column_name in header: if column_name not in df.columns: df.loc[:, column_name] = None # 过滤掉PbRatios为空的记录 filtered_df = df.dropna(subset=['PbRatio']) if filtered_df.empty: continue # 该股票无有效PbRatios记录,直接跳过 # 取过滤后最新日期的记录 latest_record = filtered_df[filtered_df.asOfDate == filtered_df.asOfDate.max()] # 追加写入csv,不写入索引列 latest_record.to_csv('output.csv', mode='a', index=False, columns=header, header=False)
关键改动说明
- 单独写入表头:避免循环中重复写入表头,第一次执行时创建文件并写入表头
- 过滤空值记录:用
dropna(subset=['PbRatio'])剔除PbRatios为空的行,确保后续取的最新记录是有效的 - 增加空数据判断:补充
df is None or df.empty和filtered_df.empty的判断,避免无数据时触发报错 - 关闭索引写入:原代码
index=True会把DataFrame索引写入csv,改为index=False更符合输出需求
内容的提问来源于stack exchange,提问作者HTMLHelpMe
相关产品推荐
相关产品推荐

