Python基础(五)

  • pandas缺失值处理
import pandas as pd
importrandom
df01 = pd.DataFrame(np.random.randint(1,9),size = (4,4))
print(df01)
df01.ix[1:2,1:2] = np.NaN #从0开始算的第1,2行的第1,2列赋为空值
print(df01)

print(df01.dropna()) #只要包含NaN的数据行都删掉
print(df01.dropna(axis = 1)) #只要包含NaN的数据列都删掉
print(df01.dropna(how = 'all')) #必须全是NaN的数据行才删除

print(df01.fillna(0)) #将所有NaN变成0
print(df01.fillna({0:1,1:4,2:3,3:8})) #将每列的NaN指定变成不同的数
  • pandas常用数学统计方法(默认都按列)
    count(): 非NaN数据的个数
    sum(): 默认按列求和 sum(axis = 1)按行求和
    min()/max(): 最大最小值
    quantile(0.25): 计算样本分数位(0到1),参数默认0.5,即中位数
    median(): 中位数
    cumsum(): 累加和
    pct_change(): 计算百分数的变化
    std(): 标准差
    var(): 方差
    describe(): 得到以上一堆方法及各列结果的表
  • 相关数据与协方差
df01 = pd.DataFrame({'year':[1,2,3,4],'money':[40,50,60,70]})
df01.cov() #协方差: 正数正相关,负数负相关
df01.corr() #相关数 : -1到1之间

ser01 = pd.Series(['a','b','c','d','a','b','c'])
ser01.value_counts() #统计数
ser01[ser01.isin(['b','c'])] #分别判断是否在列表当中,相当于过滤,成员资格
ser01.unique() #去重
  • pandas层次索引
    swaplevel交换内外层索引
  • matplotlib绘图库
import matplotlib.pyplot as plt
import numpy as np

plt.plot([1,2,7],[3,5,2]) #绘制 折线图
plt.show() #显示图片

#显示情况
%matplotlib tk #在GUI中显示
%matplotlib inline #在行内显示

#figure
x = np.arange(-3,3,0.1)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(num = 5,figsize = (8,5)) #创建第一个图形,figsize单位为100像素
plt.plot(x,y1)
plt.plot(x,y2)
plt.show() #两条曲线在一个图里显示

#也可以
plt.plot(x,y1,x,y2)
plt.show()

plt.plot([2,3,4,5],color = 'red',linestyle = 'dashed',marker = 'o',alpha = 0.5) 
#一维数组为y值,index为x值(从0开始)
#颜色也可以同RGB格式,即'#FF0000'
#dashed参数表示虚线,虚线也可以用'--'表示,还有'-.'也可以用
#marker 的 'o'参数表示用圆点标记点
#alpha表示透明度
#具体各种style可查看帮助 help(plt.plot)

#简写方式
plt.plot(x,y1,'ro--')

'''
    刻度,标题,标签,图例
'''
x1 = [1,2,3]
y1 = [5,7,4]
x2 = [1,2,3]
y2 = [10,12,14]

#解决中文显示问题
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ["SimHei"]
mpl.rcParams['axes.unicode_minus'] = False

plt.figure()
plt.plot(x1,y1,'ro-',label = '红实线) 
plt.plot(x2,y2,'bo--',label = '蓝虚线') 

#设置标题标签
plt.xlabel('月份')
plt.xlabel('美元/亿')
plt.xlabel('月份')
plt.title('进出口数据')

#设置范围
plt.xlim(0,6)
plt.ylim(0,15)

#设置刻度
plt.xticks([1,2,3,4,5,6],str(i)+'月' for i in range(1,7))
plt.yticks(np.arange(2,16,2),['200','300','400','500','600','700','800'])

#设置坐标轴信息
ax = plt.gca()
#设置边框
ax.spines['top'].set_color(none)
ax.spines['right'].set_color(none)

#生成默认图例
plt.legend() 

plt.show()
  • subplot子图:subplot(numRows,numCols,plotNum)
import matplotlib.pyplot as plt
import numpy as np

x1 = [1,2,3]
y1 = [5,7,4]
x2 = [1,2,3]
y2 = [10,12,14]

plt.figure() #创建图像
plt.subplot(221) #创建第1个子图,2行2列的第1个位置
plt.plot(x1,y1,'ro--')
plt.subplot(223) #创建第2个子图,2行2列的第3个位置
plt.plot(x2,y2,'bo-')

plt.show()

#面向对象的形式
x1 = [1,2,3]
y1 = [5,7,4]
x2 = [1,2,3]
y2 = [10,12,14]

fig = plt.figure() #创建图像(实例化对象)
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(212)

#在ax123上画图
ax1.plot(np.random.randn(50).cumsum(),'g--')
ax2.plot(np.random.randn(50).cumsum(),'b--')
ax3.plot(np.random.randn(50).cumsum(),'r--')

plt.show()
  • subplots子图
import matplotlib.pyplot as plt

fig,axes = plt.subplots(2,2) 
#也可以fig,axes = plt.subplots(nrows = 2,ncols = 2,sharex = True,sharey = True)
'''
    print(axes) #输出: 由图片object构成的 2x2的列表
'''
#axes是一个列表
axes[0].plot(range(10),'ro-')
axes[1].plot(range(10),'bo-')
axes[2].plot(range(10),'yo-')
axes[3].plot(range(10),'mo-')

plt.show()
  • 柱状图hist代替plot
  • numpy以矩阵为基础的数学计算模块
import numpy as np

#创建数组 help(array)
np.array([1,2,3]) #用一维列表创建
np.array((1,2,3)) #用元组创建
np.array([
        [
            [1,2,3],
            [4,5,6]
        ],
        [
            [3,4,6],
            [8,6,4]
        ]  
]) #多维数组
np.zeros((3,3)) #创建元素为0的数组,用元组(3,3)表示3行3列
np.zeros((2,3,3)) #三维0数组
np.ones((3,3)) #创建元素为1的数组
np.empty((3,3)) #初始化一个空矩阵
np.arange(1,9,2) #一维数组
np.linspace(1,10,5) #生成等差数列
np.logspace(0,2,5,base = 10) #生成等比数列,从1(10**0)到100(10**2)生成5个数,base默认为10
np.random.random((3,3)) #0到1的随机数二维数组
np.random.randn((3,3)) #-1到1的随机数二维数组
np.random.randint(10,20,size = (3,3)) #范围内随机数二维数组
  • numpy属性
import numpy as np

#基本属性
arr = np.random.randint(1,9,size = (3,3))
print(arr.ndim) #维数,输出: 2
print(arr.shape) #形状,输出: (3,3)
print(arr.dtype) #类型,输出: int32
print(arr.itemsize) #字节长度,输出: 4
print(arr.size) #大小,输出: 9(=3x3)

#改变数组形状
arr2 = np.random.randint(1,9,size = (2,5))
#shape修改
arr2.shape(5,2) # 5x2=2x5 !!! 必须相等,也可以arr2.shape(5,-1),让电脑自己算
print(arr2)
#reshape修改
arr3 = np.arange(9)
arr4 = arr.reshape(3,3)
print(arr4)
arr4[0][1] = 100 #改变新数组的一个元素
print(arr4)
print(arr3) #发现原数组对应的数据也被改了,类似浅拷贝
#所以,一般这样创建
arr5 = np.arange(9).resahpe(3,3)
  • numpy基本操作
    数组不再用循环,直接就能批量运算
import numpy as np

#数组与标量运算
arr = np.anrange(0,9).reshape(3,3)
print(arr)
print(arr + 2)

#数组间运算
arr1 = np.array([
    [1,2,3],
    [4,5,6]
])
arr2 = np.array([
    [10,20,30],
    [40,50,60]
])
print(arr1+arr2) #大小要相等,才能一一对应
'''
    输出:[
        [11,22,33],
        [44,55,66]
        ]
'''

#数组的矩阵积(矩阵点积)
arr1 = np.array([
    [1,2,3],
    [4,5,6]
])
arr2 = np.array([
    [10,20],
    [40,50,,
    [70,80]
])
print(np.dot(arr1,arr2))

#多维数组的索引和切片
arr3 = np.array([
    [
        [1,2],
        [3,4]
    ],
    [
        [5,6],
        [7,8]
    ]
])
print(arr3[0][1][0]) #输出: 3
print(arr3[1,:,1]) #输出: [6,8]
print(arr3[:,:,0]) #输出: [[1,3],[5,7]]

#花式索引
arr = np.random.randint(1,9,size = (8,4))
print(arr)
print(arr[(0,3,5)]) #获取0,3,5行数据
print(arr[[0,3,5],[0,3,2]]) #获取0,0 3,3 5,2 数据
print(arr[np.ix_([0,3,5],[0,3,2])] #索引器,分别获取0,3,5行的0,3,2数据,返回一个3x3数组

#布尔索引
arr2 = np.random.random((3,3))
print(arr2)
arr3 = arr2 < 0.5
print(arr3) #布尔值构成的3x3数组
#应用
name = np.array('joe','susan','tom')
score = np.array([
    [70,80,90],
    [77,88,99],
    [66,86,96]
])
classes = np.array('语文','数学','英语')
print(score[name = 'joe']) #输出第一行数据
name2 = name=='joe' #name2为布尔一维数组[true,false,false]
score[name2].reshape(-1) #相当于score[[true,false,false]],只输出第一行
score[name = 'joe',classes = '数学'] 
#输出: [80],相当于score[[true,false,false],[false,true,false]]

#数组转置
arr2 = arr.T
  • numpy常用一元函数
    np.abs(arr)绝对值
    np.sqrt(arr)平方根
    np.exp(arr)计算指数e的多少次方
    np.log2(arr)log默认为10
    np.isnan(arr)判断is not a number?
    np.isfinite(arr)有穷的
    np.isinf(arr)无穷的
    np.sin(arr)各种三角函数和反三角函数
  • numpy常用二元函数
    np.dot(arr1,arr2)点乘
    np.greater(arr1,arr2)比较if arr1>arr2
    np.logical_and np.logial_or np.logical_xor相当于 与 或 异或
    np.power(arr,3)
  • numpy聚合函数
    arr.min() arr.max() arr.sum() arr.mean() arr.std()最小 最大 总和 平均 标准差
    参数加上axis = 0按列算,axis = 1按行算
  • np.where函数,三元表达式x if condition else y的矢量化版本
    语法:np.where(codition,x,y)
    np.where([[True,False],[True,True]],[[1,2],[3,4]],[[9,8],[7,6]])
    输出: [ [ 1 , 8 ] , [ 3 , 4 ] ]
  • unique去重
    arr = np.array(['a','b','c','a','b'])
    arr2 = np.unique(arr)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容