摘要
- nan和0之间转换
- resample('M').pad()
- conn = cx_Oracle.connect(); sql = ''' ... '''; cur.execute(sql);
temp = cur.fetchall(); df = pd.DataFrame(temp) - a = df.loc[ ~df[columns].isin(value)] ]
- if not temp.empty:
- c = dict(a, **b)
- index = series_industry.index & series_manager.index
series_manager_yield = series_manager[index] - temp = df[df.G4 == 1]
1. nan和0之间转换
#赋值nan和赋值[]是不一样的结果
df[df == 0] = np.nan #0 转化为nan
df.loc[:,'G'].fillna(0,inplace=True)
#只在G那一列进行fillna填充成0,nan在内部默认没有值
#dataframe 有自己的函数isnull() **生成随机数np.random.randn(10,6)**
df = pd.DataFrame(np.random.randn(10,6))
df.iloc[1:3,1] = np.nan
df.iloc[5,3] = np.nan
df.iloc[7:9,5] = np.nan
df[df.isnull()] = 0
df.iloc[:,1][df.isnull()] = 0
2. 日期对齐
a = pd.read_excel("煤炭综合价格指数.xls",sheetname=1)
a.set_index("date", inplace=True)
b=a.resample("M").pad()
#对于datatime可以直接进行resample处理
#pad表示填充
3. 读TXT字典格式文件
file_list = ['中信行业一级', '中信行业二级', '中信行业三级 ', '申万行业二级', '申万行业三级']
for file in file_list:
f = open('{0}.txt'.format(file))
data = pd.read_table(f,header=None,index_col=0)
f.close()
print(file+':')
print(data[1].to_dict())
print('')
print('')
4. 数据库的常用操作
conn = cx_Oracle.connect('windquery/wind2010query@10.2.89.132:1521/winddb')
sql = ''' select F1_0001, F16_0001 from TB_OBJECT_0001 '''
cur.execute(sql)
temp = cur.fetchall()
df = pd.DataFrame(temp,columns=['wind_id','security_id'])
5. 查找对应的index
a = df[df == '07'].index
a = df[ df[columns].isin(value)] ]
a = df.loc[ ~df[columns].isin(value)] ]
6. 条件判断中的应用
if not temp.empty:
#如果不为空
if manager_id not in dic_fund_manager:
if not (manager_id in dic_fund_manager):
#如果不在其中,两者都可以
#in 后的内容可以为list,series,元组,字符串等
7. 字典
#创建空的,然后用a[] = 来给key赋value
a ={}
a['test'] = 1
a.key() #是所有的key
a.value() #是所有的value
for i in a
# i 是遍历 a中的key
list_a = [1,2,3,4]
s = pd.Series(list_a)
s = s/sum(s)
dict(s)
# 直接用dict也可创建字典,根据index作为key
a = {'guoguo1':{},'guoguo2':'2','guoguo5':1000}
b= {'guoguo1':1,'guoguo3':'3','guoguo2':'5'}
c = dict(a, **b)
#有重复的时候,以后面为准
8. 交并补
a = pd.Series([1,2,3,4])
b = pd.Series([2,3,4,5])
c = a & b #c 为 ab的交集
#有时候的时间会有错开,要算相关性等需要对齐时间。
series_industry = pd.Series(dic_index_yield[industry])
index = series_industry.index & series_manager.index
# 取相同时间 此为交集
series_manager_yield = series_manager[index]
series_industry_yield = series_industry[index]
a = series_manager_yield.corr(series_industry_yield)
c = list(set(a).intersection(set(b))) #交集
c = list(set(a).union(set(b))) #并集
c = list(set(b).difference(set(a))) # 差集
9. 写文件
writer = pd.ExcelWriter('***.xlsx')
for date in dic_corr_rank:
df = ...
df.to_excel(writer, sheet_name=date, encoding='gbk')
writer.save()
10.排名百分比
a = pd.Series([3,2,1,4,10])
b = a.rank(ascending=False)
c = b/len(b)
#rank输出的即为排名,倒序表示占前百分之多少
11. dataframe的切片和判断
temp = df[df.G4 == 1]
#可以直接用.列名来判断,这样的得到的temp是满足条件的df
#注意他的列名不能以数字开头
网友评论