np.random.randn(10) 生成10个标准正态分布的随机数
np.arange(10) 长度为10的数组,值分别是0-9
arr=np.array(列表名) 列表变成数组
np.zeros(10) ones(10 表示生成全为0 或者全为1的数组
np.empty((2.3.2)) 返回未初始化的垃圾值
np.eye() np.identity() 创建单位矩阵n*n
arr[m:n] 表示包括n,不包括m
arr[0,2] 和 arr[0][2] 表示二维数组访问单个元素的含义是相同的
arr[:2,1:] 表示前两行的第一列以及第一列后边
arr[:2] 表示前两行
data[name ==‘guo’,2:] 布尔型索引(python关键字and or在布尔型中无效,用丨和&)
data[ data<0]=0
arr[[3,5,4,1]] 表示按35,4,1的顺序返回四行数据(花式索引将数据复制到新数组)
arr[[3,5,4,1],[ 3,5,4,1]] 表示返回(3,3)(5,5)元素(花式索引)
arr[[3,5,4,1],[:,3,5,4,1]] 表示按照特定的行和列顺序返回
arr[np.ix_([3,5,4,1],[3,5,4,1])] 用np.ix_函数表示按照特定的行和列顺序返回
arr.T 二维数组直接转置
ar.transpose((n,m,l)) n.m.l表示维数的编号
arr.swapaxes(1,2) 根据shape(n,m,l)→(m,n,l),转置数组
一元函数 |
说明 |
abs、fabs |
计算整数、浮点数或复数的绝对值。对于非复数,可以用更快的fabs |
sqrt、square、exp |
计算元素的平方根、平方、指数ex |
sign |
计算元素的正负号 |
ceil |
大于等于该值的最小整数 |
floor |
小于等于该值的最大整数 |
rint |
四舍五入最接近的整数,保留dtype |
modf |
将数组的整数部分和小数部分以两个独立的数组返回 |
isnan |
返回一个表示哪些是NAN的布尔型数组 |
Isfinite/isinf |
返回表示有穷和无穷的布尔型数组 |
二元函数 |
说明 |
subtract |
从第一个数组中减去第二个数组中的元素 |
multiply |
数组元素相乘 |
divide、floor_divide |
除法或者向下圆整除法(丢弃余数) |
power |
AB |
maximum/fmax |
元素级的最大值计算,fmax忽略NAN |
mod |
元素级取模运算(除法的余数) |
copysign |
将第二个数组中的值的符号复制给第一个数组中的值 |
greater/greater_equal/ less/less_equal/equal/not_equal |
执行元素级别的比较运算,最终产生布尔型数组 |
logical_and/logical_or/logical_xor |
执行元素级的真值逻辑运算 |
np.where函数是x if condition else y 的矢量化版本;
result=np.where(cond,x,y) 括号中condition为ture时x,否则y
改写嵌套:np.where(cond1&cond2,0
np.where(cond1,1
np.where(cond2,2,3)))
argmin、argmax 分别表示最大和最小元素的索引
cumsum、cumprod 所有元素的累积和、累积积(横轴1,纵轴0)
arr.sort(1) 多维数组根据某一维排序只需要根据排序的轴序号传入即可
数组的集合运算 |
说明 |
uniques(x) |
计算x中为唯一元素,并返回有序结果(序列根据发现的顺序) |
value_counts |
计算series中各值出现的频率 |
intersect1d(x,y) |
计算xy中的公共元素,并返回有序结果 |
union1d(x,y) |
xy的并集,并返回有序结果 |
in1d(x,y) |
得到元素x是否包含于y的布尔型数组 |
setdiff1d(x,y) |
集合的差 |
setxor1d(x,y) |
集合的对称差,即X+Y-2XY |
np.save(’文件名‘,数组)和np.load(’文件名‘)将数组以二进制格式保存到磁盘;
np.savez(’文件名‘,数组)将多个数组存到一个压缩文件下,读取时返回字典形式的数组
arr.np.loadtxt(‘arr_ex.txt’.delimiter=’,’)将逗号分隔符文件转化为二维数组
numpy.linalg函数 |
说明 |
diag |
以一维数组的形式返回方阵的对角线元素,或者将一维数组转化为方阵(非对角线元素为0) |
dot |
矩阵乘法;矩阵*矩阵=矩阵/数 |
trace |
对角线元素之和 |
det |
计算矩阵行列式 |
eig |
求解特征值和特征向量 |
inv |
逆矩阵 |
pinv |
伪逆矩阵 |
qr |
计算QR分解值 |
svd |
计算奇异值分界SVD |
solve |
解线性方程组Ax=b,其中A为一个方阵 |
lstsq |
计算Ax=b 的最小二乘解 |
numpy.random模块对Python的内置random进行了补充,更加高效
numpy.ransom函数 |
说明 |
seed(x) |
确定随机数生成器的种子。如果x相同,返回的随机数相同,若没有参数,系统随机返回 |
permutation |
返回一个序列的随机排序或者返回一个随机排序的范围 |
shuffle |
对一个序列就地随机排序 |
rand |
均匀分布的样本值 |
randint |
从给定的上下限范围内随机选取整数 |
randn |
正态分布样本值(平均值为0,标准差为1) |
binomial |
二项分布的样本值 |
normal |
正态分布的样本值 |
beta |
beta分布的样本值 |
chisquare |
卡方分布的眼本质 |
gamma |
gamma分布的样本值 |
uniform |
[0,1)中均匀分布的样本值 |
series由一组数据以及一组与之相关的数据标签(即索引)组成。可以通过series的values和index属性获取其数组表示形式和索引对象。(可以通过字典构建series)
obj=Series([1,2,3],index=[‘a’,’b’,’c’])
obj[obj>2],返回值大于2的,obj*2;np.exp(obj) 运算
series对象本身和索引都有一个name属性
frame= DataFrame(data,columns=[‘year’,’state’,’pop’],index=[‘one’,’two’,’three’])
将DataFrame的列获取为series:frame[‘year’]或者frame.year 索引还与原来相同,也可以根据其进行赋值,赋值的长度必须相同,如果有索引会匹配索引进行赋值
frame[‘guo’]=frame.year==’2019’ 添加列,并根据年份是否2019年进行赋值true、false
如果是嵌套字典形成DataFrame,则外层字典的键作为列,内层字典的键作为行,如果指定了索引,则按照索引
frame.columns返回所有列名
reindex可以修改索引和列,series调用该函数,某个索引值不存在,直接引入缺失值nan,
method=ffill或pad(向前填充值或搬运值)、bfill或backfill(向后填充或搬运值)
参数 |
说明 |
fill_value |
重新索引过程中,需要引入缺失值是使用的替代值 |
limit |
向前或向后填充时的最大填充量 |
level |
在multindex的指定级别上匹配简单索引,否则选取其子集 |
copy |
默认true,无论如何复制;如果为false,则新旧相等就不复制 |
obj表示series:
obj[2:3]是闭区间
obj[1]和obg[‘a’]是相同意思
obj[obj<5]
obj[[‘c’,’a’,’b’]]按照给定序列输出
dataframe的索引选项 |
说明 |
obj.ix[val] |
选取dataframe的单行或者一组行 |
obj.ix[:,val] |
选取单个列或者一组列 |
xs方法 |
根据标签选取单行或者单列,并返回一个series |
icol、irow |
根据整数位置选取单列或者单行,并返回一个series |
get_value、set_value |
根据行列标签选取和重设某个值 |
算术运算时,索引相同的进行算术运算,索引不同的引入nan值;
可以用fill_value=对缺失值进行填充
算术运算方法:add/sub/div/mul+-*/
dataframe和series的算数运算利用广播的形式进行计算(P136)
numpy的ufuncs(元素级数据方法)也可用于操作panadas对象;
另一种操作是,将函数应用到由各行或列形成的一维数组上,dataframe的apply方法可以实现:
f=lambdax:x.man()-x.min()
frame.apply(f,axis=1)
根据索引排序:sort_index(axis=1,ascending=False) ,默认axis=0
series按照值进行排序用order(),任何缺失值都会被放到最后
dataframe 根据多个列进行排序by即可:frame.sort_index(by=[‘a’,’b’])
rank()增设一个排名值:
obj.rank(ascending=False,methos=’max’)
排名时用于破坏平级关系的method |
说明 |
average |
默认:排名的平均值 |
min |
使用整个分组的最小排名 |
max |
使用整个分组的最大排名 |
first |
按值在原始数据中的出现顺序分配排名 |
skipna 在进行汇总和计算时,排除缺失值,(默认为true)
描述和汇总统计 |
说明 |
count |
非NA值的数量 |
describe |
针对series和dataframe列计算汇总统计 |
argmin/argmax |
计算能够获取到最小值和最大值的索引位置 |
idxmin/idxman |
计算能够获取到最小值和最大值的索引值 |
mean/median |
值的平均值和中位数 |
mad |
根据平均值计算平均绝对离差 |
var/std |
样本值的方差和标准差 |
skew/kurt |
样本值的偏度/峰度 |
diff |
计算一阶差分(对时间序列很有用) |
pct_change |
计算百分数变化 |
series:arr.a.corr(arr.b) 返回相关系数
dataframe:arr.corr() 返回相关矩阵(对称)
series和dataframe:arr.corrwith(arr.a) 返回series与dataframe中各列的相关系数
删除:
dropna:根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度。
对于dataframe来说,dropna默认丢弃任何含有缺失值的行。想要丢弃列传入axis=1
arr.dropna(how=’all’) 丢弃全部为NA的行
arr.dropna(how=’any’) 丢弃任何包含NA的行
arr.dropna(thresh=3) 将至少含有三个非空值的行留下
填充:
fillna:将缺失值补充为常数
arr.fillna(0) 将缺失值补充为0
arr.fillna({1:0.5,2:9}) 通过调用字典,实现不同列填充不同值
fillna默认返回新对象,但也可以对现有对象进行就地修改。inplace=True
limit=n 可以连续填充的最大数量为n
能够以低纬度的形式处理高纬度的数据;index=[[‘a’,’a’,‘a’,’a’,’b’, ’b’],[1,2,3,4,1,2]]
frame.index.names=[‘key1’,’key2’] 索引名字重命名
swaplevel() 重新调整两个级别上的名称,但是数据不会发生变化。
sortlevel() 根据单个级别中的值对数据进行排序(稳定的)
frame.sum(level=’color’,axis=1)
dataframe中将其中一列或者多列当做行索引,使用set_index(),创建新的dataframe
frame2=frame.set_index([‘a’,’b’]) 将ab两列转化为行索引
默认情况下ab两列将删除,但也可以将其保留下来:
frame2=frame.set_index([‘a’,’b’],drop=False)
reset_index()的功能正好和set_index()的功能相反,将层次化索引的级别转移到列里面
如果轴索引含有索引器,那么根据整数进行数据选取的操作总是面向标签的。
ix[:1],表示标签1前边的所有行;
如果需要基于位置索引,则series的get_value(位置参数)和dataframe的irow()行和icol()列
.loc[] 基于标签
.iloc[] 基于位置
用一个dataframe对象组成的字典或者一个三维ndarry来创建panel对象:
对于呈现面板数据的办法是堆积式的dataframe形式to_frame():
stack=pdata.ix[:,’5/30/2019’,:].to_frame()
to_frame()的逆运算:to_panel()
pandas中的解析函数 |
说明 |
read_csv |
从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号 |
resd_table |
从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(“\t”) sep=’,’ |
read_fwf |
读取定宽列格式数据(也就是说没有分隔符) |
read_clipboard |
读取剪切板中的数据,可以看做rea_table的剪切板版。在将网页转化为表格时很有用 |
read_csv/read_table函数的参数 |
说明 |
path |
表示文件系统位置、URL、文件型对象的字符串 |
sep或delimiter |
对行中各字段进行拆分的字符序列或正则表达式 |
header |
用作列名的行号。默认0,表示第一行,没有用None表示 |
index_col |
用作行索引的列编号或列名。可以是单个也可以是多个组成的列表(层次化索引) |
names |
用于没有列名的列表;header=None时 |
skiprows |
要忽略的行数(从文件开始算起),或者需要跳过的行号(从0开始) |
na_value |
一组用于替换NA 的值 |
comment |
将注释信息从行尾拆分除去的字符(一个或多个) |
parse_dates |
尝试将数据解析为日期,默认false。若为true,则尝试解析所有列。此外还可以制定需要解析的列号或者列名。如果列表的元素为列表或元组,就会将多格列组合到一起在进行日期解析工作(日期/时间分别位于两列) |
keep_date_col |
如果连接多列解析日期,则保持参与连接的列。默认false |
converters |
由列号/列名跟函数之间的映射关系组成的字典。{‘foo’:f}会对foo列的所有值应用函数f |
dayfirst |
当解析有歧义的日期时,将其看做国际格式。默认false |
day_parser |
用于解析日期的函数 |
nrows |
需要读取的行数从文件开始出算起 |
iterator |
返回一个TextParser以便逐块读取文件 |
chunksize |
文件块的代销(用于迭代) |
skip_footer |
需要忽略的函数(从文件末尾处算起) |
verbose |
打印各种解析器输出信息,“非数值列中缺失值的数量” |
squeeze |
如果数据经解析后仅含有一列,返回series |
thousands |
千分位分隔符,如“,”或“.” |