如何将yfinance返回的Pandas DataFrame转换为含datetime字段的字典?
问题描述
我通过yfinance获取了季度利润表的DataFrame,需要将其转换为特定格式的字典列表,用于Django Rest Framework。期望的格式如下(注:原格式外层大括号为语法错误,正确应为方括号包裹的列表):
[ { 'datetime': '22-09-30', 'TotalRevenue': 'xxxx', 'CostOfRevenue': 'xxxx' }, { 'datetime': '22-06-30', 'TotalRevenue': 'xxxx', 'CostOfRevenue': 'xxxx' }, { 'datetime': '22-03-30', 'TotalRevenue': 'xxxx', 'CostOfRevenue': 'xxxx' }, { 'datetime': '21-12-30', 'TotalRevenue': 'xxxx', 'CostOfRevenue': 'xxxx' } ]
我目前的代码如下,但输出格式不符合要求:
stockTicker = yf.Ticker(symbol + '.IS') stockIncomeQuarterlyPanda = stockTicker.quarterly_income_stmt stockIncomeQuarterlyChangeNan = stockIncomeQuarterlyPanda.fillna(0) stockIncomeQuarterlyPandaToDict = stockIncomeQuarterlyChangeNan.to_dict() stockIncomeQuarterly = stringify_keys(stockIncomeQuarterlyPandaToDict)
解决方案
yfinance返回的季度利润表默认是行=财务指标、列=日期的结构,需要调整格式后再转换为目标字典列表:
import yfinance as yf def get_formatted_income_data(symbol): # 获取股票数据 stock_ticker = yf.Ticker(f"{symbol}.IS") # 获取季度利润表并填充空值 income_df = stock_ticker.quarterly_income_stmt.fillna(0) # 转置DataFrame,将日期转为行索引 transposed_df = income_df.T.reset_index() # 重命名日期列 transposed_df = transposed_df.rename(columns={"index": "datetime"}) # 格式化日期为'YY-MM-DD'格式 transposed_df["datetime"] = transposed_df["datetime"].dt.strftime("%y-%m-%d") # 调整财务指标列名(匹配目标格式的驼峰式命名) transposed_df = transposed_df.rename( columns={ "Total Revenue": "TotalRevenue", "Cost Of Revenue": "CostOfRevenue" } ) # 提取需要的字段并转为字典列表 return transposed_df[["datetime", "TotalRevenue", "CostOfRevenue"]].to_dict("records")
关键步骤说明
- 转置DataFrame:原结构中日期是列名,转置后日期变为行数据,方便按日期维度生成字典项
- 日期格式化:利用
dt.strftime()将Pandas的datetime类型转为指定的字符串格式 - 列名映射:yfinance返回的财务指标名带空格,通过重命名转为目标格式的驼峰式命名
- 生成字典列表:
to_dict("records")方法直接将DataFrame的每一行转为一个字典,最终输出符合DRF需求的列表格式
内容的提问来源于stack exchange,提问作者godfather
相关产品推荐
相关产品推荐

