Python科研信息学

python-numpy&pandas学习

2019-07-26  本文已影响46人  李静数据分析

Numpy学习

一、数组基本属性

二、numpy创建数组

a = np.array([2,23,4])  # list 1d

三、广播

  1. 如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。
  2. 广播规则
    • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐
    • 输出数组的形状是输入数组形状的各个维度上的最大值
    • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
    • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

四、数组操作

函数 描述
reshape 不改变数据的条件下修改形状
flat 数组元素迭代器
flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组。(order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序)
ravel 返回展开数组,修改会影响原始数组。(order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序)
函数 描述
transpose 对换数组的维度
ndarray.T 和self.transpose()相同,数组的转置
rollaxis 向后滚动指定的轴
swapaxes 对换数组的两个轴
函数 描述
broadcast 产生模仿广播的对象
broadcast_to 将数组广播到新形状
expand_dims 扩展数组的形状
squeeze 从数组的形状中删除一维条目
函数 描述
concatenate 连接沿现有轴的数组序列
stack 沿着新的轴加入一系列数组
hstack 水平堆叠序列中的数组(列方向)
vstack 竖直堆叠序列中的数组(行方向)
函数 描述
split 将一个数组分割为多个子数组
hsplit 将一个数组水平分割为多个子数组(按列)
vsplit 将一个数组垂直分割为多个子数组(按行)
函数 描述
resize 返回指定形状的新数组
append 将值添加到数组末尾
insert 沿指定轴将值插入到指定下标之前
delete 删掉某个轴的子数组,并返回删除后的新数组
unique 查找数组内的唯一元素

五、位运算

函数 描述
bitwise_and 对数组元素执行位与操作
bitwise_or 对数组元素执行位或操作
invert 按位取反
left_shift 向左移动二进制表示的位
right_shift 向右移动二进制表示的位

六、字符串函数

函数 描述
add() 对两个数组的逐个字符串元素进行连接
multiply() 返回按元素多重连接后的字符串
center() 居中字符串
capitalize() 将字符串第一个字母转换为大写
title() 将字符串的每个单词的第一个字母转换为大写
lower() 数组元素转换为小写
upper() 数组元素转换为大写
split() 指定分隔符对字符串进行分割,并返回数组列表
splitlines() 返回元素中的行列表,以换行符分割
strip() 移除元素开头或者结尾处的特定字符
join() 通过指定分隔符来连接数组中的元素
replace() 使用新字符串替换字符串中的所有子字符串
decode() 数组元素依次调用str.decode
encode() 数组元素依次调用str.encode

七、数学函数

八、算术运算

九、统计函数

函数 描述
numpy.amin() 用于计算数组中的元素沿指定轴的最小值, 如果提供了轴,则沿其计算。
numpy.amax() 用于计算数组中的元素沿指定轴的最大值, 如果提供了轴,则沿其计算。
numpy.ptp() 数计算数组中元素最大值与最小值的差(最大值 - 最小值), 如果提供了轴,则沿其计算。
numpy.percentile() 百分位数是统计中使用的度量,表示小于这个值的观察值的百分比, 如果提供了轴,则沿其计算。
numpy.median() 函数用于计算数组 a 中元素的中位数(中值), 如果提供了轴,则沿其计算。
numpy.mean() 函数返回数组中元素的算术平均值, 如果提供了轴,则沿其计算。
numpy.average() 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。该函数可以接受一个轴参数。 如果没有指定轴,则数组会被展开

十、排序、条件刷选函数

函数 描述
numpy.sort() 函数返回输入数组的排序副本
numpy.argsort() 函数返回的是数组值从小到大的索引值
numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列
msort(a) 数组按第一个轴排序,返回排序后的数组副本。np.msort(a) 相等于 np.sort(a, axis=0)
sort_complex(a) 对复数按照先实部后虚部的顺序进行排序
partition(a, kth[, axis, kind, order]) 指定一个数,对数组进行分区
argpartition(a, kth[, axis, kind, order]) 可以通过关键字 kind 指定算法沿着指定轴对数组进行分区
numpy.argmax() 函数分别沿给定轴返回最大元素的索引
numpy.argmin() 函数分别沿给定轴返回最小元素的索引
numpy.nonzero() 函数返回输入数组中非零元素的索引
numpy.where() 函数返回输入数组中满足给定条件的元素的索引
numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素

十一、副本与视图

十二、矩阵库(Matrix)

十三、线性代数

函数 说明
dot 两个数组的点积,即元素对应相乘
vdot 两个向量的点积
inner 两个数组的内积
matmul 两个数组的矩阵积
determinant 数组的行列式
solve 求解线性矩阵方程
inv 计算矩阵的乘法逆矩阵

十四、数据保存和读取

函数 描述
numpy.save() 函数将数组保存到以 .npy 为扩展名的文件中,使用numpy.load()来获取数据
numpy.savez() 函数将多个数组保存到以 npz 为扩展名的文件中,使用numpy.load()来获取数据
savetxt() 函数是以简单的文本文件格式存储数据,对应的使用 loadtxt() 函数来获取数据

Pandas学习

一、基本介绍

#创建Srries数据结构
import pandas as pd
import numpy as np
s = pd.Series([1,3,6,np.nan,44,1])
#创建DataFrame数据结构
#方法一
dates = pd.date_range('20160101',periods=6)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
#方法二
df1 = pd.DataFrame(np.arange(12).reshape((3,4)))
#方法三:
df2 = pd.DataFrame({'A' : 1.,
                    'B' : pd.Timestamp('20130102'),
                    'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                    'D' : np.array([3] * 4,dtype='int32'),
                    'E' : pd.Categorical(["test","train","test","train"]),
                    'F' : 'foo'})
#DataFrame数据结构的简单运用
print(df2.dtypes) #查看数据中的类型
print(df2.index) #查看对列的序号
print(df2.columns) #查看对列的列名
print(df2.values) #只查看所有df2的值
df2.describe() #查看数据的总结
print(df2.T) #翻转数据, transpose
print(df2.sort_index(axis=1, ascending=False)) #对数据的 index 进行排序并输出
print(df2.sort_values(by='B')) #对数据值排序输出

二、选择数据

import pandas as pd
import numpy as np
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
print(df['A']) #按列选择
print(df.A) #按列选择
print(df[0:3]) #切片选择
print(df['20130102':'20130104']) #切片选择
print(df.loc['20130102']) #使用标签来选择数据 ,即选择某一行
print(df.loc[:,['A','B']]) #使用切片
print(df.iloc[3,1]) #采用位置进行选择
print(df.iloc[3:5,1:3]) #使用切片
print(df.ix[:3,['A','C']]) #混合选择
print(df[df.A>8]) #采用判断指令 (Boolean indexing) 进行选择

三、设置值

import pandas as pd
import numpy as np
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
df.iloc[2,2] = 1111
df.loc['20130101','B'] = 2222
df.B[df.A>4] = 0
df['F'] = np.nan
df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130101',periods=6))

四、处理丢失数据

函数 描述
dropna() 直接去掉有 NaN 的行或列
fillna() 将 NaN 的值用其他值代替
isnull() 判断是否有缺失数据 NaN, 为 True 表示缺失数据
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
df.dropna(
    axis=0,     # 0: 对行进行操作; 1: 对列进行操作
    how='any'   # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop 
    )
df.fillna(value=0)
print(df.isnull())
print(np.any(df.isnull())) == True #表格是否包含NaN值

五、导入和导出

六、合并处理

(1)concat合并

(2)merge合并

import pandas as pd
#一组key的情况
#定义资料集并打印出
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                             'A': ['A0', 'A1', 'A2', 'A3'],
                             'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                              'C': ['C0', 'C1', 'C2', 'C3'],
                              'D': ['D0', 'D1', 'D2', 'D3']})
res = pd.merge(left, right, on='key')
import pandas as pd
#两组key的情况
#定义资料集并打印出
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                      'key2': ['K0', 'K1', 'K0', 'K1'],
                      'A': ['A0', 'A1', 'A2', 'A3'],
                      'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                       'key2': ['K0', 'K0', 'K0', 'K0'],
                       'C': ['C0', 'C1', 'C2', 'C3'],
                       'D': ['D0', 'D1', 'D2', 'D3']})
res = pd.merge(left, right, on=['key1', 'key2'], how='inner')
res = pd.merge(left, right, on=['key1', 'key2'], how='outer')
res = pd.merge(left, right, on=['key1', 'key2'], how='left')
res = pd.merge(left, right, on=['key1', 'key2'], how='right')
#定义资料集
boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})
girls = pd.DataFrame({'k': ['K0', 'K0', 'K3'], 'age': [4, 5, 6]})
#使用suffixes解决overlapping的问题
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')

七、plot绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #仅仅是用来 show 图片的
# 随机生成1000个数据
data = pd.Series(np.random.randn(1000),index=np.arange(1000)) 
# 为了方便观看效果, 我们累加这个数据
data.cumsum()
# pandas 数据可以直接观看其可视化形式
data.plot()
plt.show()
data = pd.DataFrame(
    np.random.randn(1000,4),
    index=np.arange(1000),
    columns=list("ABCD")
    )
data.cumsum()
data.plot()
plt.show()
ax = data.plot.scatter(x='A',y='B',color='DarkBlue',label='Class1')
# 将之下这个 data 画在上一个 ax 上面
data.plot.scatter(x='A',y='C',color='LightGreen',label='Class2',ax=ax)
plt.show()
上一篇 下一篇

猜你喜欢

热点阅读