批量执行python文件
%run+文件名
%run ipython_script_test.py
is与==的区别
结果不同的原因是 is 对比内存地址,而==对比的是是内容,a与c内容相同,而list会改变地址
所以一个是True,一个是FALSE;
Unicode编码
str.encode('utf-8)编码
str.decode(‘utf-8’)解码
时间格式处理 strftime与strptime
#时间格式重新修改
from datetime import datetime,date,time
dt = datetime(2019,11,10,9,34,25)
#strftime
dt.strftime(’%m/%d/%Y %H/%m/%S’)
#字符串转变为时间格式
datetime.strptime(‘20190111’,’%Y%m%d’)
获取本地时间
import time
time.strftime(’%Y-%m-%d’,time.localtime())
序号迭代的方法
#常见的序号迭代方法
seq = [1,2,3,4]
len(seq)
for i in range(len(seq)):
val = seq[i]
print(val)
使用enumerate方创建一个字典
some_list = [‘foo’,‘bar’,‘baz’]
mapping = {}
for i,v in enumerate(some_list):
mapping[i] = v
print(mapping)
字典
#字典
dict1 = {1:‘aksdjalkj’,2:[‘1’,‘2’,3,‘4’]}
dict1[8] = [“2”,“5”]
dict1[9] = [“2”,“5”]
dict1[‘ddd’] = [“2”,“5”]
del dict1[‘ddd’] #快速删除
dict1.pop(9) #快速删除并返回删除的values
用序列创建字典
key_list = [1,2,3,4]
value_list = [‘a’,‘b’,‘c’,‘d’]
mapping = {}
for i,v in zip(key_list,value_list):
mapping[i] = v
print(mapping)
迭代器
可以减少编写循环时的代码量
strings =[‘a’,‘as’,‘bat’,‘car’,‘dove’,‘python’]
diedai = [i.upper() for i in strings if len(i)>2]
print(diedai)
map可以遍历列表高效生成集合
set可以显示对象中的内容
strings =[‘a’,‘as’,‘bat’,‘car’,‘dove’,‘python’]
set(map(len,strings))
Numpy作为高效数组的优势
list运行遍历所有元素*2
import numpy as np
import time
start = time.perf_counter() #开始时间
list_str = list(range(100000000))
my_list_str = [i*2 for i in list_str]
end = time.perf_counter()
print(‘程序运行时间:’,’%.10f’%(end - start),‘秒’)
numpy所有元素*2对比
start = time.perf_counter() #开始时间
arr_str = np.arange(100000000)
my_array_str = arr_str * 2
end = time.perf_counter()
print(‘程序运行时间:’,’%.10f’%(end - start),‘秒’)
numpy特性 切片后的数据重新赋值会连同被切片的数据一起修改
#基本索引和切片
arr = np.arange(8)
arr[3:5] = 31
arr_slice = arr[3:5]
arr_slice[1] = 12345
arr
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。你可以将 其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器
计算数组中的元素的开根号
import numpy as np
arr = np.arange(10)
np.sqrt(arr)
#第二参数为out可选参数,可以选择将求出的结果输出到一个已有数组中,如果选择自己的作为OUT输出则相当于对原数组中的元素进行开平方
计算数组中元素e的幂次方,e是个常数约等于2.7182
np.exp(arr)
arr_1和arr_2逐位进行比较,选择最大值.重组数组
arr_1 = np.random.randn(8)
arr_2 = np.random.randn(8)
np.maximum(arr_1,arr_2)
分别返回数组元素的整数、小数部分
arr = np.random.randn(7)*7
X,Y = np.modf(arr)
一元函数
二元函数
4.3利用数组进行数据处理
利用数组表达式代替循环的做法被称为矢量化。
一般来说矢量化的数组运算比纯Python方式快一两个数量级(甚至更多) 尤其是数值运算
例子:
一组值(网格型)中计算函数
思路:创建网格型数据需要用到np.meshgrid(两个数组的笛卡尔积内的元素的第一二个坐标分别放入两个矩阵中)
知识点:笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员
(假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。)
笛卡尔积图示
arr = np.arange(-5,5,0.01)
Xs,Ys = np.meshgrid(arr,arr)
Xs
Ys
得到了Xs与Ys网格坐标数组,按照公式进行计算
Zs = np.sqrt(Xs2+Ys2) #公式
Zs #计算结果展示
将计算结果绘图
import matplotlib.pyplot as plt
plt.imshow(Zs,cmap=plt.cm.gray);plt.colorbar()
plt.title(“Image plot of x 2 + y 2 \sqrt{x^2 + y^2} x2+y2 for a grid of values”)
第五章 pandas
pd中有两种常用的数据结构
Series:类似一维数组
#使用字典可以快速创建 Serise
dict_text = {‘aaa’:1000,‘bbb’:2000,‘ccc’:3000}
obj2 = pd.Series(dict_text)
obj2.name = ‘dict_text’
obj2.index.name = ‘state’
print(obj2)
DataFrame:是一个表格型的数据结构
#建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典
data = {‘state’: [‘Ohio’, ‘Ohio’, ‘Ohio’, ‘Nevada’, ‘Nevada’, ‘N evada’], ‘year’: [2000, 2001, 2002, 2001, 2002, 2003], ‘pop’: [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame =pd.DataFrame(data)
在算数方法中填充值
#创建数据样本
d1 = pd.DataFrame(np.arange(12).reshape((3,4)),columns = list(‘abcd’))
d2 = pd.DataFrame(np.arange(20).reshape((4,5)),columns = list(‘abcde’))
c22.sub(d2,fill_value = 0)
d1.rsub(d2,fill_value = 0)
带r的函数会将d1与d2的数据进行翻转
具体方法如下几种常用的算数计算
fill_value会使用d2的数据对空值进行补齐
d1.rsub(d2,fill_value = 0)