Numpy介绍

安装方法和引用方法

  1. pip install numpy
  2. import numpy as np

使用展示(包括random使用)

random.uniform(参数1,参数2) 在1到2之间生成浮点数

random.uniform(100.0,200.0) 随机生成100到200的浮点数

random.randint(参数1,参数2) 随机生成1到2的整数类型

np.array(列表) 将列表转换为numpy数组

ndarray 多维数据对象

  1. 创建 ndarray: np.array(array_like)
  2. 对象.dtype() 查看对象的类型
  3. np.array([[1,2,3],[4,5,6]]) 多维数组
  4. 对象.size 有多少个元素
  5. 对象.shape 返回几行几列(1,2)1行2列
  6. T 数组的转置(对高维数组而言)
  7. .ndim 查看当前维数

ndarray-创建

  1. array()将列表转换为数组,可选择显示指定dtype

  2. arange()range的numpy版,支持浮点数

  3. arange(100) # 取0-99的数据
    arange(0,10) # 取0-9
    arange(2,10,3) # 从2到10 每个间隔3(起始值,结束值,步长)
    # 步长可以给小数
    
  4. reshape(行,列) 创建几行几列的二维数组

  5. a = np.arange(20).reshape(4,5)
    # 创建4行5列 范围为0-19的二维数组
    [[ 0  1  2  3  4]
     [ 5  6  7  8  9]
     [10 11 12 13 14]
     [15 16 17 18 19]]
    
  6. linspace()类似arange(),第三个参数为数组长度

  7. linspace(起始值,结束值,长度)
    linspace(0,10,100) # 数组范围0-10 分为100份
    
  8. zeros()根据指定形状和dtype创建全0数组

  9. a = np.zeros(10,dtype='数据类型') 创建10个**类型的列表
    
  10. ones()根据指定形状和dtype创建全1数组

  11. empty()根据指定形状和dtype创建空数组(随机值)

  12. eye()根据指定边长和dtype创建单位矩阵

ndarray-数据类型

  1. 布尔型:bool_
  2. 整型:int_ int8 int16 int32 int64
  3. 无符号整型: uint8 uint16 uint32 uint64
  4. 浮点型: float_ float16 float32 float64
  5. 复数型:complex_complex64 complex 128

数组与列表的区别

  • 数组对象内的元素类型必须相同
  • 数组大小不可修改

ndarray-批量运算

  • 数组和标量之间的运算
  • a+1 ,a*3 ,1//a,a**0.5 a>5
  • 同样大小数组之间的运算
  • a+b,a/b.a**b,a%b,a==b

索引和切片

索引[行,列] 而 pandas对象是[列,行]

  1. 一维数组的索引:a[5]
  2. 多维数组的索引:列表式写法:2[2][3]新式写法:a[2,3]、

切片

  1. a[起始位置:4] 从起始位置切4个

  2. [[1,2,3,4,5,6,7,8]
    a[0:4] # 得出的值为 1 2 3 4
    a[4:] # 从4开始切所有
     [[ 0  1  2  3  4]
     [ 5  6  7  8  9]
     [10 11 12 13 14]]
     a[0:2,0:2] 行从0切2行 列从0切2列
    
  3. 0行开始 切片就是从0开始,1行开始就是从1

  4. 一维数组的切片:a[5:8] 从第5-1行切8列, a[4:] 从4-1行切全部列,a[2:10] = 1 将从第2行切10列的值变为1

  5. 多维数组的切片:a[1:2,3:4] ,a[:3:5],a[:,1]

  6. 数组切片与列表切片的不同:数组切片时并不会自动复制(而是创建一个视图),在切片数组上的修改会影响原数组。

  7. copy方法可以创建数组的拷贝

布尔索引

  1. a[a>5] 返回a大于5的数组列表

  2. print(a[a>3]) # 取a>5
    b = a[a>3] 
    print(b[b%2==0]) # 取偶数
    

ndarray-花式索引

a = np.arange(10)
a = [1,2,3,4,5,6,7,8,9]
# 我要取1 3 4 6 7 没有规律怎么办
# 花式索引
b = a[[1,3,4,6,7]]
a[0,2:4] # 0-2然后从2的位置取到4的位置
a = 
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
 # 取 6 8 16 18
 print(a[[1,3],:][:,[1,3]]) # 先取第一行和第三行全部列,然后取全部行,第1列和第3列。
 [[ 6  8]
 [16 18]]
 a = [行,列]

ndarray通用函数

  1. abs()返回绝对值

  2. numpy.sqrt(array[, out])函数用于按元素确定数组的正平方根。

  3. round() 四舍五入

  4. np.floor() 向下取整

  5. np.ceil()向上取整

  6. np.maximum(a,b)

  7. a = np.array([2,5,3,4])
    b = np.array([5,2,1,6])
    print(np.maximum(a,b))
    # 对比2个数组一一对比,返回最大值
    
  8. np.mininum(a,b) 返回最小值

Numpy统计

  1. sum() 求和
  2. mean() 求平均值
  3. min() 求最小值
  4. max ()求最大值
  5. var()方差
  6. std() 标准差,方差再开一个根
  7. argmax()返回最大值索引
  8. argmin()返回最小值索引

Numpy-随机数生成

  1. random.rand 给定形状产生随机数组(0到1之间的数)

  2. random.randint(起始值,结束值,个数) 给定形状产生随机整数

  3. random.randint(起始值,结束值,(3,5)) 3行5列的二维数组
    
  4. random.choice 给定形状产生随机选择

  5. random.shuffle 与random.shuffle相同 打乱一个数组

  6. random.uniform 给定形状产生随机数组

histogram()函数

统计区间中的数量

列如: a1 = [1,2,4,1,8,9]

np.linspace(1,10,4) 取1到10然后划分3给区间

np.histogram(a1,np.linspace(1,10,4))

区间1-4-7-10

1-4中a1有[1,2,1] 3个

4-7中a1有[4] 1个

7-10中a1有8,9 2个

series介绍

series

  1. series是一种类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成

  2. 创建方式

  3. a = pd.Series([4,7,-5,3])
    0    4
    1    7
    2   -5
    3    3
    b = pd.Series([4,7,-5,3],index=['a','b','c','d'])a    4
    b    7
    c   -5
    d    3
    
  4. 获取之数组和索引数组:values属性和index属性

  5. Series比较像列表(数组)和字典的结合体

  6. 可以和数进行运算,比如2给相同大小的series对象相加

  7. 也可以切片 a[0:2] a[起始位置,切几个]

  8. a[a>4] 布尔值过滤

  9. 通用函数 np.abs(a)

  10. sr = pd.Series({'a':1,'b':2})
    print(sr)
    a    1
    b    2
    
    # 可以用字典创建
    
    # 可以通过字典key值获取
    
    # 判断一个键是否在字典里
    
    'a' in sr:
        True
    
  11. index 索引属性 values值属性

  12. sr['a':'c'] 切片

Series-整数索引

sr = pd.Series(np.arange(20))
print(sr)
sr2 = sr[10:].copy()
print(sr2)
print(sr2[10]) # 会解释成标签,与索引相混乱
# 使用loc 用标签获取不用索引
print(sr2.loc[10])
# 使用iloc 用下标获取
print(sr2.iloc[0])

Series-数据对齐

pandas在进行两个series对象的运算时,会按索引进行对齐然后计算

c+c a+a d+d

如果有sr1与sr2 相加索引有对不齐的会产生NaN值

fill_value 如果sr1+sr2加上有对应不上的,按有的值进行填充空值,如果都没有则填充为0

  • sr.isnull() 判断sr里面有没有空值 有会Ture 没有为False
  • sr.notnull() 与isnull()相反
  • sr.dropna() 把缺失值扔掉
  • sr.fillna(0) 所有NaN的值会变成0 sr.fillna(sr.mean()) 把NaN替换为平均值

Series-小结

  1. 数组+字典
  2. 整数索引 loc(解释为标签)和iloc(解释为索引)
  3. 数据对齐 NaN
  4. 缺失数据处理 dropna fillna

DataFrame对象

DataFrame对象常用属性

  1. index 获取索引

  2. T 转置 把行和列相互替换

       one  two
    0    1    4
    1    2    5
    2    3    6
         0  1  2
    one  1  2  3
    two  4  5  6
    
  3. columns 获取列索引

  4. values 获取值数组(二维数组)

  5. describe() 获取快速统计

DataFrame获取值(先选列在选行)

  1.    one  two
    0    1    4
    1    2    5
    2    3    6
    df["one"]["0"] # 返回的就是第0行的one列
    # 推荐使用 loc 和 iloc 
    print(frame.loc[0,'one']) 
    # loc和iloc是先取行在取列
    # 取第0标签的所有值
    print(frame.loc[0,:])
    one    1
    two    4
    

DataFrame-索引和切片

花式索引同样适用

# 取第0行和第2行,two列的值
print(frame.loc[[0,2],'two'])
0    4
2    6

DataFramed-数据对齐与缺失处理

# 对齐,如果没有值则为NaN
frame = pd.DataFrame({'one':[1,2,3],'two':[4,5,6]},index=[0,1,2])
frame2 = pd.DataFrame({'one':[1,2,3,5],'two':[4,5,6,7]},index=[1,0,2,3])
print(frame)
print(frame2)
print(frame+frame2)
  one  two
0    1    4
1    2    5
2    3    6
   one  two
1    1    4
0    2    5
2    3    6
3    5    7
   one   two
0  3.0   9.0
1  3.0   9.0
2  6.0  12.0
3  NaN   NaN
  1. fillna(0) 缺失值填充与Series对象一样
  2. drop() 删除行或者列
  3. dropna() 如果行里面有一个缺失值,就删除整行
  4. dropna(how='all') 如果一样所有的值都为NaN就删除
  5. how默认值为any 只要有NaN,就删除整行
  6. dropna(axis=0) 默认为0 行,axis=1列与其他的axis是相反的

Pandas常用方法

mean(axis=0,skipna=False) 对列(行)求平均值

axis = 0列 = 1 行 0就是跨行 1就是跨列

sum(axis=0) 对列(行)求和

sort_values(by='列名/行',ascending=T/F,axis=0/1) 对值按列名升序排序 ,降序加上ascending = False为降序

sort_index(axis,...,ascending=T/F) 对列(行)索引排序

drop 和 dropna 默认删除某一行axis=1 与其他函数相反

Numpy的通用函数同样适用于Pandas

pandas时间对象处理

  1. 时间对象库:datetime
  2. 灵活处理时间对象:dateutil.parser.parse()
  3. 成组处理时间对象:pandas pd.to_datetime()
  4. datetime.datetime.strptime('2020-01-01','%Y-%m-%d') 将字符串转化为时间对象(2020,1,1,0,0)
  5. dateutil库 dateutil.parser.parse('2020-01-01') 直接转换,(2020,1,1,0,0)
  6. pandas.to_datetime(['2020-01-01','2021-01-01']) 转换为DatetimeIndex(['2020-01-01','2020-02-02'])

生成时间对象(Timestamp类型)

date_range

start 开始时间

end 结束时间

periods 时间长度

freq 时间频率 默认为‘D’,可选H(our)、W(eek)、B(usiness)、S(emi-)M(onth),(min)T(es),S(econd),A(year)

  1. pd.date_range('日期1','日期2') 生成日期1到日期2的的时间
  2. pd.date_range('日期',periods=60) 生成从日期开始到第60天结束
  3. pd.date_range('日期',periods=60,freq='H') 按小时生成
  4. freq = 'W' 按周 ,'W-MON' 按周一
  5. frea='B' 工作日
  6. 对象.topydatetime()将对象转换为日期类型

Pandas文件处理

  1. pd.read_csv (‘路径’)默认分隔符为逗号
  2. pd.read_table(‘路径’) 默认分隔符为制表符
  3. 指定某一列作为行索引 index_col="列名/0"
  4. parse_dates=True 解析时间序列 parse_dates['列名']指定列变成时间对象
  5. header=None 自动生成列名,names=[‘内容’] 指定生成定列名
  6. na_values=[‘None’] 指定那些字符串表示缺失值
  7. sep 指定文件分隔符
  8. na_rep 指定缺失值转换的字符串,默认为空字符串
  9. header= False 不输出列名一行 index=False 不输出行索引一列
  10. colums =[0,1,2,3]指定输出的列,传入列表