当前位置:
首页 > Python基础教程 >
-
Python 常用笔记
记录
http://blog.sina.com.cn/s/blog_73b339390102yoio.html PE:市盈率 = 股价 / 每股盈利 PEG:(市盈率相对盈利增长比率/市盈增长比率) PEG=PE/(企业年盈利增长率*100) PB:市净率=股价 / 每股净资产 PS:市销率=股价 / 每股收入=总市值 / 销售收入 ROE:净资产收益率=报告期净利润/报告期末净资产 EPS:每股盈余=盈余 / 流通在外股数 beta值:每股收益=期末净利润 / 期末总股本 # 投资收益率计算器 import math 年均投资收益率 = (pow(终值/本金, 1/年限) -1)*100 投资收益本息 = pow((1+预期年收益率),年限)*本金 投资目标年限 = math.log(终值/本金)/math.log(1+预期年收益率) 年化收益率 = ((终值-本金)/本金)/年限 或 利息*365/(本金*天数) 利息收益 = 本金*年化收益率*天数/365 单利终值 = 本金*(1+年利率*年限) 单利现值 = 终值/(1+年利率*年限) 复利终值 = 本金*((1+年利率)**年限) 复利现值 = 终值/(1+年利率)**年限 等额本金月供 =(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率 等额本息月供 = 本金*月利率*[(1+月利率)**(年限*12)]/[(1+月利率)**(年限*12)-1]
时间转换
import time a = '2020-03-06 19:18:00' a1 = time.strptime(a,'%Y-%m-%d %H:%M:%S') #格式化str为time格式 print(time.strftime('%Y%m%d',a1)) #格式化time格式为str print(time.asctime(time.localtime(time.time()))) #格式化当前时间为 Thu Apr 7 10:29:13 2016 print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 格式化成2016-03-20 11:45:39形式 print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())) # 格式化成Sat Mar 28 22:24:24 2016形式 a = "Sat Mar 28 22:24:24 2016" print (time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))) # 将格式字符串转换为时间戳 import calendar calendar.month(2016, 1) #输出2016年1月份的日历 import pandas as pd pd.to_datetime('2016-03-20').strftime('%Y%m%d') #pandas 格式化str输出 from datetime import datetime,timedelta datetime.today() # 返回当前时间时分秒都为0 now.isoweekday() # 返回的1-7代表周一--周日 now.weekday() # 返回的0-6代表周一--到周日 datetime.strptime('20150101', "%Y%m%d") # 格式化字符串成datetime格式 (pd.to_datetime('20200130')+timedelta(days=3)).strftime('%Y%m%d') #格式化后三天的日期 now = datetime.now()+timedelta(days=3) print(now.strftime('%Y-%m-%d')) #格式化当天后三天的日期
列表排序
import operator,json aa = [{"key": "780", "A": ["01", "03", "05", "07", "09"], "T": "1"}, {"key": "781", "A": ["01", "03", "05", "07", "09"], "T": "3"}, {"key": "782", "A": ["01", "03", "05", "07", "09"], "T": "9"}] print(json.dumps(aa,indent=2, ensure_ascii=False)) b = sorted(aa,key=operator.itemgetter('key')) # 列表或json数据排序 #虽说loads是转回json 但是像这样key是单引号不能直接转 需要先dumps data ="[{'a':1,'b':2,'c':3,'d':4,'e':5}]" json1 = json.dumps(data) print(json.loads(json1)) print(type(json1),json1) with open('222.txt','r') as f2: a = json.load(f2) json.dump(aa,open('111.txt','w'),indent=4) json.loads() #str转json json.load() #读取文本str格式转json json.dumps() #输出成字符串 json.dump() #将json写入文本 a = ''.join(str(i)+',' for i in df1['cod'].tolist())[:-1] #list转换str [i,v for i,v in enumerate(list)] a = ['e', 'a', 'u', 'o', 'i'] a.sort() #升序 正序 a.sort(reverse=True) # 降序 逆序 不能存变量 a.sort(key= lambda x : x[1]) # 根据第二个字母排序 默认根据第一个字母排序 sorted(a) # 可存变量 保留原list 可传参数 reverse = True 降序 , reverse = False 升序(默认) sorted([[6,7,8],[2,3,4],[1,2,3]], key=lambda x: x[2]) #多维列表 根据元素排序 sorted(lis,key=lambda x:cod.index(x[0])) #多维列表 根据单维列表进行指定排序 lis为多维 cod是单列表 [[k,v] for k,v in dict(new).items() if k not in dict(B1).keys()] #二维列表转化成dict,比较两个列表i[0]的差集 ['别墅' if '别墅' in i else '车位' if '车位' in i else '高层' for i in a] #列表推导示例 [[i[0],i[2]] for i in old for v in new if i[0] == v[0] and i[2] != '0'] d = {'lily':25, 'wangjun':22, 'John':25, 'Mary':19} sorted_keys = sorted(d) # 对字典而言,默认是对keys进行排序 print(sorted_keys) sorted_keys1 = sorted(d, key=lambda x : x[1]) print(d_new2) d_new = sorted(d.items(), key=lambda x: x[1], reverse=True) # 根据年龄排序,返回列表形式 print(d_new) d_new = dict(d_new) # 使用内置函数把嵌套列表转换成字典 print(d_new) sorted_values = sorted(d.values(), key=lambda x:x, reverse=False) # 排序值 print(sorted_values) 输出: ['John', 'Mary', 'lily', 'wangjun'] ['wangjun', 'Mary', 'lily', 'John'] [('lily', 25), ('John', 25), ('wangjun', 22), ('Mary', 19)] {'lily': 25, 'John': 25, 'wangjun': 22, 'Mary': 19} [19, 22, 25, 25] #互换dick的key和value d = {'lily':25, 'wangjun':22, 'John':25, 'Mary':19} d_new = {v:key for key,v in d.items()} print(d_new) 输出:{25: 'John', 22: 'wangjun', 19: 'Mary'}
编码转换
df.to_csv('abdata.csv', mode='a', encoding='utf_8_sig') # pandas导出csv 要指定编码 #python2 指定utf8 #coding:utf-8 import sys reload(sys) sys.setdefaultencoding("utf-8") f.write(unicode('%s-日期 成交:%s万 成交额:%s亿'%(i[0],i[1],i[2]),"utf-8")+ '\n') #py2写入中文也有毛病要加unicode
pandas操作
from sqlalchemy import create_engine from datetime import datetime,timedelta import numpy as np import pandas as pd import tushare as ts import matplotlib.pyplot as plt from matplotlib import colors from pylab import mpl #正常显示画图时出现的中文和符号 import time ts.set_token("123") pro = ts.pro_api() pd.set_option('display.unicode.ambiguous_as_wide', True) #设置中文列名对齐 pd.set_option('display.unicode.east_asian_width', True) #设置列名对齐 pd.set_option('display.max_rows',None) #显示所有行 pd.set_option('display.max_columns',None) #显示所有列 pd.set_option('expand_frame_repr', False) #设置不换行 pd.set_option('max_colwidth',100) #设置显示最大字符 np.set_printoptions(suppress=True) # 非科学计数法 mpl.rcParams['font.sans-serif']=['SimHei'] mpl.rcParams['axes.unicode_minus']=False pd.options.mode.chained_assignment = None %matplotlib inline #jupyter画图用
df['aa'].astype('float') #转换整列格式 df.reset_index(drop=True) #重置index索引 并删除原索引 dfs.drop_duplicates() #去除完全相同的行保留第一行 .loc['a1']#根据index获取行 .iloc[0].name #根据行号获取行的某个值 # loc和iloc 可以更换单行、单列、多行、多列的值 df1.loc[0,'age']=25 # 思路:先用loc找到要更改的值,再用赋值(=)的方法实现更换值 df1.iloc[0,2]=25 # iloc:用索引位置来查找 # at 、iat只能更换单个值 df1.at[0,'age']=25 # iat 用来取某个单值,参数只能用数字索引 df1.iat[0,2]=25 # at 用来取某个单值,参数只能用index和columns索引名称 #pivot()和unstack()实现行转列 dfcod = counts[['cod','key','日期1','日期2']].set_index(['key','日期1','日期2','cod']).unstack() df1 , df2 = df[['日期1','日期2','key']] , df.pivot('日期2','cod',v) #行转列 列转行参考 https://www.cnblogs.com/leohahah/p/9778304.html #新增一行 用append 但必须要得先创建DataFrame才行 df1=df1.append(new,ignore_index=True) # ignore_index=True,表示不按原来的索引,从0开始自动递增 #新增一列 tabsdetail['SH'] = sh.append([sh,sh,sh]).tolist() #sh是Series tabs.insert(0, '总金额', [m,m*2,m*3,m*4],allow_duplicates=True) #指定位置添加一列 np.array(df0[['name','key']]).tolist() #dataframe转化list dfdata = pd.DataFrame() dfdata = dfdata.append(df1,ignore_index=True) #pandas append必须存入变量 否则不生效 pd.DataFrame([[1,2,3],[1,2,3]],columns=['a','b','c'],index=df0.index) #创建dataframe df0 = pd.DataFrame({'id':[3,4,5,6,7,3,4,5], 'name':[10.54,11.11,12.80,10.05,11.21,10.98,11.12,10.55]}, index=('a1','a2','a3','a4','a5','a6','a7','a8')) df0.loc[df0['id'] == 3 ,'key'] = 1 df0.loc[df0['id'] == 5 ,'key'] = 0 # 进行布尔值判断 输出符合条件 df0['key'] = np.where(df0['id'] == 3 ,1,0) pd.concat([df0, df1], axis=1) #合并两个dataframe df.index=pd.to_datetime(df.date) # 将index 改为时间 df=df.sort_index() #排序index df['ret']=df.close/df.close.shift(1)-1 # .shift(1) 获取下一个 .shift(-1) 获取上一个 data.sort_values(by=['标记','时间'],ascending=[False,True]) #多列排序指定升降序 df['当天'].fillna(method='ffill',inplace=True) #根据一列nan值填充上一个不为nan的值 df['a'] = (df_new.ret+1.0).cumprod() #计算当前值并累计连乘 .cumsum()累积连加 df1['ret'].diff() # 比较上一值与当前值的差 [i for i in df["close"].rolling(k).mean()] # 移动窗口list的均值 df['c'].rolling(window=10, min_periods=1, center=False).mean() #Series中计算均值 #dataframe行转列 - 只能根据相同列名不同行名数据转置 适合matplotlib用 单index日期画图 比如多个日期 每个日期中需要转置的行名不得重复 df1 = df[['cod','盈亏','日期2']].pivot('日期2','cod','盈亏').rename_axis([None], axis=1) # pivot 指定列名 行名 数据 只能固定这三个参数 df1 = df1.rename_axis(None, axis=1).reset_index() # 取消第一个columns 将其拍平 df1.index=pd.to_datetime(df1.日期2) #dataframe行转列 - 整合统计用 可以根据多个指定的index 但是set_index必须是前面列表-1的列 不然会乱 前面列表剩下的一个元素就是数据其他为index dfcod = counts[['cod','key','盈亏','日期2','日期1']].set_index(['key','日期1','日期2','cod']).unstack() dfcod.columns = [s1 +'_'+ str(s2) for (s1,s2) in dfcod.columns.tolist()] # 将其拍平 # dfcod.reset_index(inplace=True) # 重置index 转成正常的dataframe dfcod.loc[['
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式