在对dataframe做整列加减运算时:
from ast import AnnAssign
from WindPy import w
import pandas as pd
import numpy as np
w.start() # 默认命令超时时间为120秒,如需设置超时时间可以加入waitTime参数,例如waitTime=60,即设置命令超时时间为60秒
w.isconnected() # 判断WindPy是否已经登录成功
a=w.wsd("SS2203.SHF", "oi,oiamount,volume,amt,st_stock", "ED0D", "2022-01-20", "unit=1")
arr=np.zeros((6,1))
df=pd.DataFrame(arr,columns=[1],index=['品种','持仓量'
,'持仓保证金','成交量','成交额','注册仓单数'])
name=a.Codes[0][0:2].split('2')[0]
df.loc['品种',1]=name
df.loc['持仓量':'注册仓单数',1]=a.Data
col=df.loc['持仓量':'注册仓单数',df.loc['品种'].isin([name])].columns.values
fm=pd.DataFrame(a.Data,index=['持仓量','持仓保证金','成交量','成交额','注册仓单数'],columns=col)
df.loc['持仓量':'注册仓单数',df.loc['品种'].isin([name])]+=fm
出现了:
TypeError: can only concatenate list (not "float") to list
原因在于,在用wind导出的数据list对dataframe直接赋值,如下:
df.loc['持仓量':'注册仓单数',1]=a.Data
修改成先转为dataframe格式再对df赋值就可以解决:
df.loc['持仓量':'注册仓单数',[1]]=pd.DataFrame(a.Data,index=['持仓量','持仓保证金','成交量','成交额','注册仓单数'],columns=[1])