【python Error】‘list‘ object has no attribute ‘head‘解决办法,list/dict/dataframe转换

问题描述:
AttributeError: ‘list’ object has no attribute ‘head’
在这里插入图片描述
原因分析:
对象是List格式,所以不能用head。
在这里插入图片描述
方案一:直接提取内容

#提取前十个
words[:10]
#提取第5到第10
words[5:10]
#从第10个开始提取(要减1)
words[9:]

方案二:转换

pd.DataFrame(list)

在这里插入图片描述

字典-表格-列表相互转换

列表list转字典dictdict(List)
将两列list拼接成字典:
1)
Dict={}
for i in range(len(list1)):
Dict[list1[i]]=list2[i]
Dict
2) dict(zip(list_keys,list_values))
——————————————————————————

字典dict转列表list
单个key/values转换:
list(dict) #字典中的key转换为列表
list(dict.keys())#字典中的key转换为列表
list(dict.values()) #字典中的value转换为列表
——————————————————————————
列表list转表格dfpd.DataFrame(List)
——————————————————————————
表格df转列表list
按行列转:pd[col_name].tolist()
pd.loc[row_name].tolist()
整个表转换:
第一种:df.values.tolist()
第二种:[tuple(x) for x in df.values]
——————————————————————————
字典dic转表格dfpd.DataFrame(Dict)
——————————————————————————
表格df转字典dicdf.to_dict()

``` import baostock as bs import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns plt.rcParams ['font.sans-serif'] ='SimHei' #显示中文 plt.rcParams ['axes.unicode_minus']=False #显示负号 three_factors=pd.read_csv('fivefactor_daily.csv')[['trddy','mkt_rf','smb','hml','rmw','cma']].rename(columns={'trddy':'日期'}).set_index('日期') three_factors=three_factors.loc['2023-04-01':'2024-03-31',:] three_factors.index=pd.to_datetime(three_factors.index) three_factors.head(3) def sum_return_ratio(price_list): '''实际总收益率''' price_list=price_list.to_numpy() return (price_list[-1]-price_list[0])/price_list[0] def MaxDrawdown(price_list): '''最大回撤率''' i = np.argmax((np.maximum.accumulate(price_list) - price_list) / np.maximum.accumulate(price_list)) # 结束位置 if i == 0: return 0 j = np.argmax(price_list[:i]) # 开始位置 return (price_list[j] - price_list[i]) / (price_list[j]) def sharpe_ratio(price_list,rf=0.000041): '''夏普比率''' #公式 夏普率 = (回报率均值 - 无风险率) / 回报率的标准差 # pct_change()是pandas里面的自带的计算每日增长率的函数 daily_return = price_list.pct_change() return daily_return.mean()-rf/ daily_return.std() def Information_Ratio(price_list,rf=0.000041): '''信息比率''' chaoer=sum_return_ratio(price_list)-((1+rf)**365-1) return chaoer/np.std(price_list.pct_change()-rf) def deal(code='', mode='五因子'): day_return = return_dict[code] # ['收益率'] day_return.index = pd.to_datetime(day_return.index) 实际总收益率 = sum_return_ratio(day_return['收盘']) 最大回测率 = MaxDrawdown(day_return['收盘']) 夏普比率 = sharpe_ratio(day_return['收盘']) 信息比率 = Information_Ratio(day_return['收盘']) zgpa_threefactor = pd.merge(three_factors, day_return, left_index=True, right_index=True) if mode == '五因子': result = sm.OLS(zgpa_threefactor['收益率'], sm.add_constant(zgpa_threefactor.loc[:, ['mkt_rf', 'smb', 'hml', 'rmw', 'cma']])).fit() betas = result.params return pd.DataFrame( {'阿尔法': betas[0], '市场风险因子MKT': betas[1], '市值因子SMB': betas[2], '账面市值因子HML': betas[3], '盈利能力因子RMW': betas[4], '投资风格因子CMA': betas[5], '实际总收益率': 实际总收益率, '最大回测率': 最大回测率, '夏普比率': 夏普比率, '信息比率': 信息比率, '股票代码': code}, index=[0]) else: # zgpa_threefactor = pd.merge(three_factors, day_return,left_index=True, right_index=True) result = sm.OLS(zgpa_threefactor['收益率'], sm.add_constant(zgpa_threefactor.loc[:, ['mkt_rf', 'smb', 'hml']])).fit() betas = result.params return pd.DataFrame( {'阿尔法': betas[0], '市场风险因子MKT': betas[1], '市值因子SMB': betas[2], '账面市值因子HML': betas[3], '实际总收益率': 实际总收益率, '最大回测率': 最大回测率, '夏普比率': 夏普比率, '信息比率': 信息比率, '股票代码': code}, index=[0]) df_results = pd.DataFrame() for code, df_one in return_dict.items(): result = deal(code=code,mode='五因子'); result['股票名称'] = code_name[code] df_results = pd.concat([df_results, result], axis=0, ignore_index=True) df_results=df_results[['股票代码', '股票名称','阿尔法', '市场风险因子MKT', '市值因子SMB', '账面市值因子HML', '实际总收益率', '最大回测率', '夏普比率', '信息比率']].sort_values(by='阿尔法',ascending=False) df_results ### 储存结果 df_results.to_csv('五因子结果.csv',index=False)```代码运行错误怎样更改
最新发布
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值