本文主要针对Python处理Excel & CSV文件的应用。所有代码均实例化代入且逐条备注解释。
全文逐条手工输入整理,可能会产生错误之处,还请指正。
之后会陆续整理 “爬虫” 与 “金融量化分析” 两个文档
# --------------------------------------------------------------------------------------------
代码格式规范与排版:
# 代码下方出现波浪线表示代码输入的不规范,但依旧可正常执行代码。
# 如格式不清楚是否规范,可通过复制黏贴可运行的代码至空白处,系统会自动修正代码格式。
或Ctrl+Alt+L,直接将代码格式化
一、空行:
1. import语句上下保留两个空行
2. def函数声明上方保留两个空行
3. class类声明上方保留两个空行
4. def方法声明上方保留1个空行
5. 2个逻辑代码块之间保留1个空行
二、空格:
# 为方便阅读,以下用^代替空格
1. 赋值符号前后各保留一个空格 # 例: a^=^10
2. 所有二元运算符和数字之间用空格分开 # 例: a^+=^c^+^d
3. (),[],{} 括号内无空格 # 例: 合计=pd.concat([数据.总计])
4. 逗号、冒号、分号前面无空格,后面有一个空格 # 例: print(x,^y)
5. 参数列表、索引、切片的左括号前无空格 # 例: list[index]
三、缩进:
4个空格为一个缩进级别
四、断行:
1. 在逗号后面断开
2. 在运算符号前面断开
五、数字类型分类:
int 整数类型 # 例: 1
float 浮点类型 # 例: 1.0
complex 复数类型 # 例: 1+2j (1为实部,2为虚部)
bool 布尔类型 # 例:仅False/True两个值
六、运算符分类:
1.算数运算符:
+ 加 # 1+2=3 or 'Hello'+'World'='HelloWorld' 数字类型之间为求和,其他类型之间为连接符
- 减 # 2-1=1
* 乘 # 2*3=6 or 'Hello'*2='HelloHello' 数字类型之间为求积,其他类型之间为重复操作
/ 除 # 2/1=2
% 取余 # 3%2=1
// 取整 # 3//2=1 or -3//2=-2 求小于a/b的商的最大整数
** 幂(次方) # 10**2=100
2.关系运算符:
== 等于 # a等于b时,返回True,否则False
!= 不等于 # a不等于b时,返回True,否则False
> 大于
< 小于
>= 大于等于
<= 小于等于
3.逻辑运算符:
not 非 # a为True,返回False,a为False,返回True
and 与 # a,b全为True,返回True,否则False
or 或 # a,b一者及以上为True,返回True,否则False
4.赋值运算符:
+= a+=b >> a=a+b
-= a-=b >> a=a-b
*= a*=b >> a=a*b
/= a/=b >> a=a/b
%= a%=b >> a=a%b
**= a**=b >> a=a**b
//= a//=b >> a=a//b
&= a&=b >> a=a&b
》= a》=b >> a=a》b
《= a《=b >> a=a《b
5.位运算符:
~ 位反
& 位与
| 位或
^ 位异或
》 右移
《 左移
七、运算符优先级:
() 小括号
def() 函数调用
[],[] 切片
[] 下标
. 引用类成员
** 幂
~ 位反
+,- 正负号
*,/,% 乘,除,取余
+,- 加,减
《,》 位移
& 位与
^ 位异或
| 位或
not 非
and 与
or 或
lambda() Lambda表达式
in,not in,is,is not,<,<=,>,>=,<>,!=,== 比较
八、控制语句:
1.分支语句
1.1 if结构:
if score >= 85:
print('优秀')
if score < 60:
print('加油')
if (score >= 60)and(score <= 85):
print('努力')
# 条件计算为True,则执行语句;否则执行if后面语句
1.2 if-else结构:
if score >= 60:
print('及格')
if score >= 90:
print('优秀')
else:
print('不及格')
# 先判断if条件,如果True,则执行语句1,然后跳过else语句及语句组2;
如果False,则跳过语句1,执行语句2
1.3 elif结构:
if score >= 90:
grade='A'
elif score >= 80:
grade='B'
elif score >= 70:
grade='C'
else:
grade='F'
print('Grade='+grade)
# 为if-else结构的多层嵌套,只执行if条件中的某一个语句
2.循环语句
2.1 while语句:
i=0
while i*i<100
i+=1
print('i={0}'.format(i))
print('i*i={0}'.format(i*i))
# 循环次数无限制,只要满足条件则循环
2.2 for语句:
for item in 'Hello':
print(item)
# 输出:H e l l o
for item in range(1,10,2) # 1代表开始值,10代表结束值 2代表步长
print('Count is:{0}'.format(item))
# 输出:Count is:1 Count is:3 Count is:5 Count is:7 Count is:9
# 用于序列循环,序列包括字符串,列表,元组
3.跳转语句
3.1 break语句:
for item in range(5)
if item == 3
break
print('Count is:{0}'.format(item))
# 输出:Count is:0 Count is:1 Count is:2
# 强行退出循环体,不再执行剩余语句
3.2 continue语句:
for item in range (5)
if item == 3
continue
print('Count is:{0}'.format(item))
# 输出:Count is:0 Count is:1 Count is:2 Count is:4
# 跳过if目标语句,执行循环体
九、常见异常:
1. AttributeError异常:访问一个类中不存在的元素(包括:成员变量、属性、成员方法)
2. OSError/IOError/FileNotFoundError异常:操作系统相关异常(例:”未找到文件“或”磁盘已满“)
3. IndexError异常:访问序列元素时,下标索引超出取值范围(例:序列中共4个元素,要访问第5个元素时会弹出该异常)
4. KeyError异常:访问字典里不存在的键
5. NameError异常:使用一个不存在的变量
6. TypeError异常:传入的变量类型与要求不符
7. ValueError异常:传入一个无效的参数值
十、日期的计算:
# datetime 表示时间和日期 ; date 表示日期 ; time 表示一天内的时间 ; timedelta 表示时间差
import datetime as 日期模块:
def 累加月(日期,传入的月份):
年=传入的月份//12
传入的月份=日期.month+传入的月份%12
if月!=12:
年=年+月//12
月=月%12
return 日期模块.date(日期.year+年,月,日期.day)
起始日期=日期模块.date(2020,05,26)
for i in 数据.index:
数据['日期'].at[i]=起始日期+日期模块.timedelta(days=i)
# 例:2020.05.26 2020.05.27 2020.05.28
数据['日期'].at[i]=日期模块.date(起始日期.year+i,起始日期.month,起始日期.day)
# 例:2020.05.26 2021.05.26 2022.05.26
数据['日期'].at[i] =累加月(起始日期,i)
# 例:2020.05.26 2020.06.26 2020.07.26
print(datetime.datetime.today())
# 输出: 2021-10-13 16:02:56.794003
# 返回当前本地日期和时间
print(datetime.datetime.now())
# 输出: 2021-10-13 16:02:56.794003
# 返回当前本地日期和时间
print(datetime.datetime.utcnow())
# 输出: 2021-10-13 08:02:56.794003
# 返回当前UTC日期和时间 (UTC时间与北京时间差8个小时)
print(datetime.datetime.fromtimestamp(999999999.999))
# 输出: 2001-09-09 09:46:39.999000
# 返回与UNIX时间戳对应的本地日期和时间
print(datetime.datetime.utcfromtimestamp(999999999.999))
# 输出: 2001-09-09 01:46:39.999000
# 返回与UNIX时间戳对应的UTC日期和时间
print(datetime.date(2021,10,13))
# 输出:2021-10-13
# 表示日期信息
print(datetime.time(23,59,58,1999))
# 输出:23:59:58.001999
# 表示一天中的具体时间信息
print(datetime.timedelta())
# 计算日期间的差异