二、numpy模块及Pandas模型使用
numpy模块
1.ndarray的创建
import numpy as np
a=np.array([1,2,3,4])
b=np.array([[1,2,3,4],[5,6,7,8]])
print(a) #[1 2 3 4]
print(b) #[[1 2 3 4][5 6 7 8]]
1.1使用array()函数创建
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称 | 描述 |
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
1.2使用arange()函数
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
numpy.arange(start, stop, step, dtype)
1.3使用linespace()函数
用于创建一个一维数组,一个等差数列构成的
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
和range类似
注意:np.linspace形成的数组一定包括范围的首位两个元素,则步长为(end - start) / (length - 1)。而np.arange是自己指定的步长(默认为1)也就意味着形成的数组不一定包括末尾数
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
start: 开始值
stop: 结束值
num=50: 等差数列中默认有50个数
endpoint=True: 是否包含结束值
retstep=False: 是否返回等差值(步长)
dtype=None: 元素类型
1.4使用logspace()函数
用于创建一个一维数组,一个等比数列构成的,等间隔的一维数组
数据为对数函数log的值
参数说明:
start: 开始值
stop: 结束值
num=50: 数列中默认有50个数
endpoint=True: 是否包含结束值
base: log函数的底数,默认为10
dtype=None: 元素类型
1.5使用empty()函数创建
作用创建一个指定形状的未初始化的数组,由于未初始化,所以输出是随机值
numpy.empty(shape, dtype = none, order = 'C')
1.6使用zeros(),ones(),full(),eye()函数
三个函数类似于empty(),创建指定形状的数组,
不过zeros是以0来初始化,ones是以1来初始化,其中的1和0 默认为浮点数,
full函数()可以以自己指定的值来填充,所以会多一个参数fill_value原型,
np.eye(N, M=None, k=0, dtype=float):对角线为1其他的位置为0的二维数组,
其中N:行数,M:列数,k=0:向右偏移0个位置
numpy.zeros(shape, dtype = float, order = 'C’)
numpy.ones(shape, dtype = float, order = 'C’)
numpy.full(shape, fill_value,dtype = float, order = 'C’)
numpy.eye(N, M=None, k=0, dtype=float)
1.7生成随机数:使用random.random(),random.randint(),random.rand(),random.randn(),random.choice()函数
random([size]):生成size个[0.0,1.0)的随机数
randint(low,[high,size,dtype]):生成指定范围的任意维度的随机整数,数组元素的范围[low, high)区间
rand(d0,d1,…,dn):[0,1)之间随机数,具有均匀分布
randn(d0,d1,…,dn):返回具有标准正态分布(均值为0,方差为1)Choice(a,size=None,replace=True):从指定的一维数组中生成随机数
1.8使用asarray()函数
从已有的数组创建数组
a1=np.zeros([3,2])
a2=np.asarray(a1)
print(a1)
print(a2)
tup=(1,2,3,4)
a3=np.asarray(tup)
print(a3)
x=((1,2,3),(4,5,6),(7,8,9))
a=np.asarray(x)
print(a)
'''
[[0. 0.][0. 0.][0. 0.]]
[[0. 0.][0. 0.][0. 0.]]
[1 2 3 4]
[[1 2 3][4 5 6][7 8 9]]
'''
1.9使用frombuffer()函数
实现动态数组
numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
Pandas模块
1.DataFrame对象创建
二维带行标签和列标签的数组
df = pd.DataFrame(data, index=index, columns=columns)
其中 index是行标签, columns是列标签,data可以是下面的数据
由一维 numpy数组,list, Series构成的字典
二维 numpy数组
一个 Series
另外的 DataFrame对象
属性名 | 含义 |
len(x) | 表示对象值的长度。 |
size | 表示对象值的长度。 |
index | 表示列索引数。 |
columns | 表示行索引数。 |
dtypes | 表示列的数据类型。 |
shape | 表示有多少行列. |
values | 表示对象值,即二维数组。 |
info | 表示对象的基本信息:索引情况、各列的名称、数据数量、数据类型等。 |
head(num) | 从头部开始显示几行,参数um表示显示的行数,默认为5行。 |
tail(num) | 从末尾开始显示几行,参数num表示显示的行数,默认为5行。 |
数据选取
DataFrame.loc[行索引名称或条件,列索引名称] 【基于索引名称】
DataFrame.iloc[行索引位置, 列索引位置] 【完全基于位置】(只接收int)
2.分组统计函数——groupby函数
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
功能: 根据给定的条件将数据拆分成组
每个组否可以独立应用函数(sum,mean,min)
将结果合并到一个数据结构中
3.面向列的聚合函数——agg函数
DataFrame.agg(func=None, axis=0, *args, **kwargs)
1.简单的列或行统计
默认对列统计(axis=0)
2.对每一个列数据应用同一个函数————func参数传入一个函数
3.对某列数据应用不同函数————func参数传入多个函数
元组(name,function):自定义name替换function名
4.对不同列数据应用不同函数————func参数传入字典{‘列名’:’函数名’}
4.transform() 函数:用于保持原始 DataFrame 结构的元素级转换
总是返回一个与原始 DataFrame 或 Series 相同形状的 DataFrame 或 Series。
即使只对一列或一行应用函数,transform() 也会返回一个完整的 DataFrame 或 Series。
DataFrame.transform(func=None, *args, **kwargs)
返回结果有两种:1.可以广播的标量值(np.mean) 2.可以是与分组大小相同结果的数组。
df=pd.DataFrame(np.arange(36).reshape(6,6),columns=list('abcdef'))
df['key']=pd.Series(list('aaabbb'),name='key')
print(df)
group1=df.groupby(['key']).agg('mean')
print(group1)
group2=df.groupby(['key']).transform('mean')
print(group2)
'''a b c d e f key
0 0 1 2 3 4 5 a
1 6 7 8 9 10 11 a
2 12 13 14 15 16 17 a
3 18 19 20 21 22 23 b
4 24 25 26 27 28 29 b
5 30 31 32 33 34 35 ba b c d e f
key
a 3 4 5 6 7 8
b 24 25 26 27 28 29a b c d e f
0 6.0 7.0 8.0 9.0 10.0 11.0
1 6.0 7.0 8.0 9.0 10.0 11.0
2 6.0 7.0 8.0 9.0 10.0 11.0
3 24.0 25.0 26.0 27.0 28.0 29.0
4 24.0 25.0 26.0 27.0 28.0 29.0
5 24.0 25.0 26.0 27.0 28.0 29.0
'''
5.apply() 函数:最通用的函数
DataFrame.apply(func=None, axis=0,raw=False,result_type=None,*args, **kwds)
func:要应用的函数。它可以是一个 Python 函数,也可以是一个字符串(例如 'sum'、'mean' 等)。
axis:应用函数的轴。如果 axis=0(默认值),则函数将沿着列方向应用;如果 axis=1,则函数将沿着行方向应用。
raw:是否将底层数据传递给函数。如果 raw=True,则传递底层 NumPy 数组;否则传递 Series 对象。
result_type:结果类型。可以是 'expand'、'reduce' 或 'broadcast'。
args:要传递给函数的额外参数。 *kwds:要传递给函数的额外关键字参数。
data={'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]
}
df=pd.DataFrame(data)
print(df)
result=df.apply(lambda x:x.mean())
result1=df.apply('mean')
print(result,result1,sep='\n')
result=df.apply(lambda x:x+1)
print(result)
'''
A 2.0
B 5.0
C 8.0
dtype: float64
A 2.0
B 5.0
C 8.0
dtype: float64A B C
0 2 5 8
1 3 6 9
2 4 7 10
'''