数据分析与展示笔记(个人总结)

这是个人的一个学习后的笔记总结,可能有不好的地方,希望大家多提提意见

一、Numpy库

ndarray对象

NumPy 最重要的一个对象是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,可以使用基于 0 的索引访问集合中的项目。

创建ndarray数组格式:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
  • object数组或者嵌套的数列
  • dtype数组类型,可选
  • copy表示对象是否需要复制,可选
  • order创建数组样式C(按行)、F(按列)或A(任意,默认)
  • subok默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类
  • ndmin指定返回数组的最小唯独

一般情况下使用最多的是object、dtype和ndmin

示例1:
创建一维数据

import numpy as np

a = np.array([1,2,3,4,5,6,7,8,9])
print(a)

输出结果

[1 2 3 4 5 6 7 8 9]

示例2:
创建二维数据

import numpy as np
b = np.array([[1,2,3],[2,3,4]]) #创建二维数据
print(b)

输出结果

[[1 2 3]
 [2 3 4]]

示例3:
指定数据的数据类型

c = np.array([1,2,3],dtype=float)  #指定数据
print(c)

输出结果

[1. 2. 3.]
np数据类型
序号数据类型及描述
1.bool_ 存储为一个字节的布尔值(真或假)
2.int_ 默认整数,相当于 C 的long,通常为int32int64
3.intc 相当于 C 的int,通常为int32int64
4.intp 用于索引的整数,相当于 C 的size_t,通常为int32int64
5.int8 字节(-128 ~ 127)
6.int16 16 位整数(-32768 ~ 32767)
7.int32 32 位整数(-2147483648 ~ 2147483647)
8.int64 64 位整数(-9223372036854775808 ~ 9223372036854775807)
9.uint8 8 位无符号整数(0 ~ 255)
10.uint16 16 位无符号整数(0 ~ 65535)
11.uint32 32 位无符号整数(0 ~ 4294967295)
12.uint64 64 位无符号整数(0 ~ 18446744073709551615)
13.float_ float64的简写
14.float16 半精度浮点:符号位,5 位指数,10 位尾数
15.float32 单精度浮点:符号位,8 位指数,23 位尾数
16.float64 双精度浮点:符号位,11 位指数,52 位尾数
17.complex_ complex128的简写
18.complex64 复数,由两个 32 位浮点表示(实部和虚部)
19.complex128 复数,由两个 64 位浮点表示(实部和虚部)

设置数据类型示例
设置数组x数据类型为负数类型

import numpy as np
x = np.array([1,2,3],dtype=np.complex)
print(x)

输出结果

[1.+0.j 2.+0.j 3.+0.j]
ndarray对象的属性
属性说明
ndarray.ndim秩,即轴的数量或维度的数量
ndarray.shape数组的维度,对于矩形,n行m列
ndarray.size数组元素的总个数,相当于.shape中n*m的列
ndarray.dtypendarray对象的元素类型
ndarray.itemsizendarray对象中每个元素的大小,以字节为单位
ndarray.flagsndarray对象的内存信息
ndarray.realndarray元素的实部
ndarray.imagendarray元素的虚部
ndarray.data数组元素的缓冲区,一般用不到

示例

import numpy as np

x = np.array([[1,2,5,3],[2,3,5,6]],dtype=np.int16)
# print(x)
print(x.size)
print(x.ndim)
print(x.shape)
print(x.dtype)
print(x.itemsize)
print(x.data)

输出结果

8
2
(2, 4)
int16
2
<memory at 0x06F85B70>
创建ndarray数组

(1)、从python结构(例如:列表、元祖)转换
格式:x = numpy.array(list/tuple)
带数据类型:x=numpy.array(list/tuple, dtype=np.float32)

当numpy.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型

(2)、使用NumPy中函数创建ndarray数组,例如,arange、ones、zeros等

arange格式

arange([start,] stop[, step,], dtype=None)

start是开始的数字、stop是终止数字,step是步长,dtype是None。取值是左闭右开

示例:

import numpy as np

a = np.arange(3)
b = np.arange(1,3)
c = np.arange(3,7,2)
print(a)
print(b)
print(c)

输出结果:

[0 1 2]
[1 2]
[3 5]

ones格式

ones(shape, dtype=None)

shape返回的数组维度,dtype指定数组元素类型。这里默认放回的是浮点型

示例:

import numpy as np

a = np.ones(5)
b = np.ones([2,3],dtype=int)
print(a)
print(b)

输出结果:

[1. 1. 1. 1. 1.]
[[1 1 1]
 [1 1 1]]

zeros格式

zeros(shape, dtype=None)

shape返回的数组维度,dtype指定数组元素类型。这里默认放回的是浮点型

示例:

import numpy as np

a = np.zeros(5)
b = np.zeros([2,3],dtype=int)
print(a)
print(b)

输出结果

[0. 0. 0. 0. 0.]
[[0 0 0]
 [0 0 0]]

处理以上函数还有很多
如:

import numpy as np

np.empty(shape, dtype=None)	# 根据维度shape生成一个随机元祖
np.full(shape, fill_value)	# 根据shape生成一个数组,每个元素值都是val
np.eye(n)	# 创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.linspace(start, stop, num=50)#指定元素数量的均匀递增数组
np.zeros_like(a) # 返回具有与给定数组相同的形状和类型的零数组
np.ones_like(a) # 返回具有与给定数组相同的形状和类型的1数组
np.empty_like(prototype) # 回具有与给定数组相同的形状和类型的新随机数组

(3)、从随机函数创建

随机生成数组需要考虑的因素:

  1. 数据范围:区间,整数、小数
  2. 数据分布:均匀分布、正态分布、指定分布
  3. 数据形状:size

常用的随机函数

函数解释
rand(d0,d1,…)[0,1]均匀分布
randint(low,high,size)[low,high)整数均匀分布
choice(a,size,replace,p)指定数组指定概率分布
randn(d0,d1,…)标准正态分布

示例:

均匀分布

import numpy as np

a = np.random.rand(2,3)
print(a)

输出结果

[[0.38268359 0.94986424 0.3964916 ]
 [0.22080613 0.43691959 0.39960606]]

整数均匀分布

import numpy as np

a = np.random.randint(4,size=(2,3))
print(a)

输出结果

[[3 0 2]
 [3 0 3]]
ndarray方法
import numpy as np

a = np.array([[1,2,3,4,3,4,5,2,32,3,2,4]],dtype=int)
a.astype(float) #更改数据类型
a.reshape([3,4]) #更改数据形状
a.resize((2,6)) #修改原数组形状,在原先的数组上改变
# a.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
a.flatten() #对数组进行降维,返回折叠后的一维数组,原数组不变
b = a.tolist() #是将ndarray数组转换成列表
数据的切片

数据的切片与python列表的切片类似

一位数组的切片

import numpy as np

a = np.array([1,2,3,4,5])
print(a)
print(a[2]) #3
print(a[0:3:1]) #[1 2 3]

结果:

[1 2 3 4 5]
3
[1 2 3]

多维数组

import numpy as np

a = np.arange(24).reshape((2,3,4))
print(a)
print(a[0,2,3]) #11
print(a[1,0:2,1]) #[13,17]
print(a[0,1,:]) # [4 5 6 7]

结果:

[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
11
[13 17]
[4 5 6 7]
Numpy一元函数
函数说明
np.abs(x)/np.fabs(x)计算数组元素绝对值
np.mean(x)求平均值
np.sqrt(x)计算各元素的平方根
np.square(x)计算各元素的平方
np.log(x) / np.log10(x) / np.log2(x)计算数组各元素的自然对数、10底对数和2底对数
np.ceil(x) / np.floor(x)计算大于等于该值得最小整数和小于等于该值的最大整数
np.rint(x)计算数组各元素的四舍五入值
np.modf(x)将数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x) / np.cosh(x)
np.sin(x)/np.sinh(x)
np.tan(x)/np.tanh(x)
计算数组各元素的普通型和双曲型三角函数
np.exp(x)计算数组各元素的指数值
np.sign(x)计算正负号:1(正)、0(0)、-1(负)
np.isnan(ndarray)返回一个判断是否是NaN的bool型数组

示例:

import numpy as np
a = np.array([-3, -2, -1, 0, 1, 2, 3, 4, 5])
print(np.mean(a))

输出结果

1.0
Numpy二元函数
函数说明
+ - * /数组各元素进行相对应的加减乘除运算
np.maximum(x,y)/np.fmax(x,y)
np.minimum(x,y) np.fmin(x,y)
数组元素对应的最大值和最小值计算,fmax和fmin忽略Nan
np.mod(x,y)数组元素对应的模运算
np.copysign(x,y)将数组y中各元素值的符号赋值给数组x对应元素
np.multiply(x,y)数组元素对应的相乘运算
np.power(x,y)数组元素对应的x的y次方
>、<、>=、<=、==、!=数组各元素进行算术比较,结果参数布尔型数组

示例:

import numpy as np

a = np.array([-3, -2, -1, 0, 1, 2, 3, 4, 5])
b = np.array([4, 6, 5, 1, 2, 3, 5, 3, 2])
print(a > b)
print(np.maximum(a, b))

输出结果

[False False False False False False False  True  True]
[4 6 5 1 2 3 5 4 5]
csv文件存取

数据存为csv文件

格式:

np.savetxt(frame, array, fmt='%.18e', delimiter=None)
  • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
  • array : 存入文件的数组
  • fmt : 写入文件的格式,例如:%d %.2f %.18e
  • delimiter : 分割字符串,默认是任何空格

示例

a = np.array([-3, -2, -1, 0, 1, 2, 3, 4, 5])
np.savetxt('a.csv',a,fmt="%d",delimiter=",")

读取csv文件

np.loadtxt(frame, dtype=np.float, delimiter=None,unpack=False)
  • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
  • dtype : 数据类型,可选
  • delimiter : 分割字符串,默认是任何空格
  • unpack : 如果True,读入属性将分别写入不同变量

示例

a = np.loadtxt('a.csv',dtype=np.float,delimiter=",",unpack=False)
print(a)

保存为csv只能是一维数组和二维数组

存为外部文件时制定的分隔符和读文件指定的分隔符要一致
否则读时就不要指定分隔符,使用默认的

多维数据的存取

存储

a.tofile(frame, sep='', format='%s')
  • frame : 文件、字符串
  • sep : 数据分割字符串,如果是空串,写入文件为二进制
  • format : 写入数据的格式

示例

a = np.arange(50).reshape(5,5,2)
a.tofile("a.data",sep=",",format="%d")

读取

np.fromfile(frame, dtype=np.float, count=‐1, sep='')
  • frame : 文件、字符串
  • dtype : 读取的数据类型
  • count : 读入元素个数,‐1表示读入整个文件
  • sep : 数据分割字符串,如果是空串,写入文件为二进制

示例

a = np.fromfile("a.bat", dtype=np.int, count=-1, sep=",")
print(a)
NumPy的便捷文件存取

保存为外部文件

np.save(fname,array)  或者  np.savez(fname,array)
  • fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
  • array: 数组变量

读取为外部文件

np.load(fname)
  • fname : 文件名、以.npy为扩展名,压缩扩展名为.npz
NumPy的统计函数(1)
函数说明
sum(a,axis=None)根据给定中axis计算数组a相关元素之和,axis整数或元组
mean(a,axis=None)根据给定中axis计算数组a相关元素的期望值,axis整数或元组
average(a,axis=None,weights=None)根据给定轴axis计算数组a相关元素的加权平均值
std(a,axis=None)根据给定轴axis计算数组a相关元素的标准差
var(a,axis=None)根据给定轴axis计算数组a相关的方差

axis=None 是统计函数的标配参数

NumPy的统计函数(2)
函数说明
min(a) max(a)计算数组a中元素最小值、最大值
argmin(a) argmax(a)计算数组a中元素最小值、最大值的降一维后的下标
unravel_index(index,shape)根据shape将一维下标index转换成多维下标
ptp(a)计算数组a中元素最大值与最小值的差
median(a)计算数组a中元素的中位数(中值)

二、Pandas库

Pandas 基于NumPy包构建,Pandas中使用了很多NumPy的数据结构,这些数据结构在很多Python数据科学工具包中都是通用的。Pandas的数据可用于SciPy中的统计分析,Matplotlib中的函数绘图,Scikit-learn中的机器学习算法。

Pandas的两个主要数据结构是Series和DataFrame。

DataFrame可以理解为一张表,Series就是其中的一个列。

series数据定义

Series类型可以由如下类型创建

  • Python列表:index与列表元素个数一致

  • 标量值:index表达Series类型的尺寸

  • Python字典:键值对中的“键”是索引,index从字典中进行选择操作

  • ndarray:索引和数据都可以通过ndarray类型创建

  • 其他函数:range()函数等

示例:

import pandas as pd

a = pd.Series([1, 2, 3, 4, 5]) # 列表创建
b = pd.Series([4, 5, 6, 7, 8], index=[1, 2, 3, 4, 5]) # 指定索引值
c = pd.Series({"a": 1, "b": 2}) # 用字典创建,key是索引,value是值
print(a)
print("-" * 10)
print(b)
print("-" * 10)
print(c)

输出结果

0    1
1    2
2    3
3    4
4    5
dtype: int64
----------
1    4
2    5
3    6
4    7
5    8
dtype: int64
----------
a    1
b    2
dtype: int64
Series定位元素

Series类型包括index和values两部分,他的操作类似于ndarray类型和python字典类型
Series的元素定位使用[],这里可以使用自定义的索引也可以使用元素位置索引进行定位

示例:

import pandas as pd

b = pd.Series([4, 5, 6, ], index=["a", "b", "c"])
print(b["a"])
print(b["c"])
print(b[1])
print(b[2])

输出结果

4
6
5
6

注意:自动索引和自定义索引不能一起并存

Series切片

可以通过自定义索引的列表进行切片,也可以通过自动索引进行切片,如果存在自定义索引,则一同被切片。

示例

import pandas as pd

b = pd.Series([4, 5, 6, 7, 8], index=["a", "b", "c", "d", "e"])
print(b[0:3])
print("-"*10)
print(b["a":"b"])

输出结果

a    4
b    5
c    6
dtype: int64
----------
a    4
b    5
dtype: int64

注意:自动索引和自定义索引不能一起并存

Series类型的基本操作

Series类型的操作类似Python字典类型:

  • 通过自定义索引方位
  • 保留字典操作
  • 使用.get()方法
  • 两组数据进行运算,他是基于索引进行运算的,只会将两组有相同的索引的进行运算,如果没有相同的索引输出的是NaN

示例

import pandas as pd

a = pd.Series([4, 5, 6, 7, 8], index=["a", "b", "c", "d", "e"])
b = pd.Series([1, 2, 3, 4, 5], index=[1, "b", "c", "d", 3])
# 使用字典操作进行操作数据
print(a.get("b"))
print(a.get(7,100))
print("-"*10)
print(a+b)
print("-"*10)
a.name = "数据a"
print(a)

输出结果

5
100
----------
1     NaN
3     NaN
a     NaN
b     7.0
c     9.0
d    11.0
e     NaN
dtype: float64
----------
a    4
b    5
c    6
d    7
e    8
Name: 数据a, dtype: int64
DataFrame数据

DataFrame是一个表格型的数据类型,每列值类型可以不同
DataFrame既有行索引、也有列索引
DataFrame常用于表达二维数据,但可以表达多维数据

DataFrame类型可以由如下类型创建:

  • 二维ndarray对象
  • 由一维ndarray、列表、字典、元组或Series构成的字典
  • Series类型
  • 其他的DataFrame类型

示例1
通过字典进行创建

import pandas as pd

data = {
    'apples': [3, 2, 0, 1],
    'oranges': [0, 3, 7, 2]
}
a = pd.DataFrame(data)
print(a)

输出

   apples  oranges
0       3        0
1       2        3
2       0        7
3       1        2

示例2:
指定行索引,如果不指定,默认是从0开始的索引

import pandas as pd

data = {
    'apples': [3, 2, 0, 1],
    'oranges': [0, 3, 7, 2]
}
a = pd.DataFrame(data, index=['June', 'Robert', 'Lily', 'David'])
print(a)

输出

        apples  oranges
June         3        0
Robert       2        3
Lily         0        7
David        1        2

示例3:
指定行索引(index)列索引(columns)

import pandas as pd

a = pd.DataFrame([[1, 2, 3, 4], [5, 4, 3, 5]],index=[1,2],columns=[1,2,3,4])
print(a)

输出

   1  2  3  4
1  1  2  3  4
2  5  4  3  5

示例5:

dt = {"one": pd.Series([1, 2, 3], ["a", "b", "c"]), "two": pd.Series([8, 2, 4, 6], ["a", "b", "c", "d"])}
d = pd.DataFrame(dt, index=["a", "c", "f"], columns=["two", "three"])
print(d)

输出

   two three
a  8.0   NaN
c  4.0   NaN
f  NaN   NaN

他会通过创建时给点行列值去字典里去匹配,如果匹配的到就继续补齐,要是在字典里不存在就给NaN进行补齐

DataFrame的定位数据
  • .index 是输出所有行索引
  • .columns 是输出所有列索引
  • .values 是输出所有的数据,每一行数据成一个列表
  • 通过[]定位数据,第一个[]表示列索引,第二个[]表示行索引

示例

import pandas as pd

dl = {"城市": ["北京", "上海", "广州", "深圳", "沈阳"],
      "环比": [102.3, 103.2, 234, 543, 543],
      "同比": [454.3, 165.2, 453, 433, 332],
      "定基": [143.3, 342, 53, 3243, 432]}

d = pd.DataFrame(dl, index=["c1", "c2", "c3", "c4", "c5"])
# print(d)
# print(d.index) #输出行索引
# print(d.columns) #输出列索引
# print(d.values) #输出所有数据,每一行数据成一个列表
print(d["城市"])
print("-"*10)
print(d["环比"]["c2"])
print("-"*10)
print(d["定基"]["c1":"c3"])

输出

c1    北京
c2    上海
c3    广州
c4    深圳
c5    沈阳
Name: 城市, dtype: object
----------
103.2
----------
c1    143.3
c2    342.0
c3     53.0
Name: 定基, dtype: float64
重新排序索引

这些方法可用在Series中和DataFrame中

.reindex(index=None,columns=None,...)

index, columns 新的行列自定义索引
fill_value 重新索引中,用于填充缺失位置的值
method 填充方法, ffill当前值向前填充,bfill向后填充
limit 最大填充量
copy 默认True,生成新的对象,False时,新旧相等不复制

示例

import pandas as pd

dl = {"城市": ["北京", "上海", "广州", "深圳", "沈阳"],
      "环比": [102.3, 103.2, 234, 543, 543],
      "同比": [454.3, 165.2, 453, 433, 332],
      "定基": [143.3, 342, 53, 3243, 432]}

d = pd.DataFrame(dl, index=["c1", "c2", "c3", "c4", "c5"])
a = d.reindex(index=["c1", "c3", "c2", "c5", "c4"])
print(a)

输出

    城市     环比     同比      定基
c1  北京  102.3  454.3   143.3
c3  广州  234.0  453.0    53.0
c2  上海  103.2  165.2   342.0
c5  沈阳  543.0  332.0   432.0
c4  深圳  543.0  433.0  3243.0
索引类型的常用方法

.append(idx) 连接另一个Index对象,产生新的Index对象
.diff(idx) 计算差集,产生新的Index对象
.intersection(idx) 计算交集
.union(idx) 计算并集
.delete(loc) 删除loc位置处的元素
.insert(loc,e) 在loc位置增加一个元素e

算术运算法则

算术运算根据行列索引,补齐后运算,运算默认产生浮点数
补齐时缺项填充NaN (空值)
二维和一维、一维和零维间为广播运算
采用+ ‐ * /符号进行的二元运算产生新的对象

方法形式的运算:

.add(d, **argws) 类型间加法运算,可选参数
.sub(d, **argws) 类型间减法运算,可选参数
.mul(d, **argws) 类型间乘法运算,可选参数
.div(d, **argws) 类型间除法运算,可选参数

示例

import pandas as pd
import numpy as np

a = pd.DataFrame(np.arange(20).reshape(4, 5))
b = pd.DataFrame(np.arange(20, 0, -1).reshape(4, 5))
c = b.add(a)
print(c)

输出

    0   1   2   3   4
0  20  20  20  20  20
1  20  20  20  20  20
2  20  20  20  20  20
3  20  20  20  20  20
pandas读取外部文件

使用read_table来读取文本文件**(这里的table可以是csv或者excel等等)**

pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None, 
                  index_col=None, dtype=None, engine=None, nrows=None)

参数说明:
filepath 接收string。表示文件路径。无默认
sep 接收string。代表分隔符。read_csv默认为",",read_table默认为制表符"Tab"
header 接收int或者sequence。表示将某行数据作为列名。默认为infet,表示自动识别
names 接收array。表示列名。默认为None
index_col 接收int、sequence或false。表示索引列的位置,取值为sequence这代表多重索引,默认为None
dtype 接收dict。代表写入的数据类型(列名为key,数据格式为values).默认为None
nrows 接收int。表示读取前几行

也可以在括号中加上encoding指定数据类型

示例1
读取csv文件

df = pd.read_csv('purchases.csv')
df = pd.read_csv('purchases.csv', index_col=0) #指定第一列为索引

示例2
读取json数据

Json文件的内容:

{
  "apples": {
      "June": 3,
      "Robert": 2,
      "Lily": 0,
      "David": 1
  },
  "oranges": {
      "June": 0,
      "Robert": 3,
      "Lily": 7,
      "David": 2
  }
}

使用Pandas加载Json文件

df = pd.read_json('purchases.json')

df

输出

        apples  oranges
David        1        2
June         3        0
Lily         0        7
Robert       2        3

示例3
读取sql数据

import sqlite3

con = sqlite3.connect("database.db")

df = pd.read_sql_query("SELECT * FROM purchases", con)

df

输出

    index  apples  oranges
0   David       1        2
1    June       3        0
2    Lily       0        7
3  Robert       2        3

就像CSV一样,我们可以通过传递index_col='index',来设置索引:

df = df.set_index('index')

df

复制

        apples  oranges
index
David        1        2
June         3        0
Lily         0        7
Robert       2        3
Pandas DataFrame存储到CSV, JSON,SQL

有时需要存储DataFrame到文件中,可以把DataFrame存储到CSV, JSON,SQL数据库中,如下所示:

df.to_csv('new_purchases.csv')

df.to_json('new_purchases.json')

# 保存到SQL数据库
import sqlite3
con = sqlite3.connect("database.db")
df.to_sql('new_purchases', con)

当保存为JSON和CSV文件时,只需指定适当的文件名。使用SQL,不是创建一个新文件,而是使用con数据库连接将一个新表插入数据库。

Pandas 常用方法

.head(num) 打印前几行数据

.tail(num) 打印倒数几行数据

.info 可以查看数据集的基本信息

.shape 表示DataFrame的形状(行、列)

pandas库的排序

1、在指定轴上根据索引进行排序,默认升序

.sort_index(axis=0,ascending=True)

axis是指定的轴,0是index,1是colums
ascending是表示升序,默认为True,当为false时是代表降序

2、在指定轴上根据数值进行排序,默认升序

Series.sort_values(axis=0,ascending=True)
DataFrame.sort_values(by,axis=0,ascending=True)

by:axis轴上的某个索引或索引列表

示例:

c = b.sort_values(2,axis=0,ascending=False)   #是对应列索引的2轴进行降序排序
c = b.sort_values("a",axis=1,ascending=False) #是根据行索引的a进行排序

在进行平排序时如果遇到NaN值会统一将NaN值放到最后

基本统计分析函数

1、适用于Series和DataFrame类型

.sum() 计算数据的总和,按0轴计算
.count() 非NaN值的数量
.mean() .median() 计算数据的算术平均值、算术中位数
.var() .std() 计算数据的方差、标准值
.min() .max() 计算数据的最小值、最大值

2、适用于Series类型

.argmin() .argmax() 计算数据最大值。最小值所在位置的索引位置(自动索引)
.idxmin() .idxmax() 计算数据最大值。最小值所在位置的索引(自定义索引)

3、适用于Series和DataFrame类型

.describe() 针对0轴(各列)的统计汇总

pandas去除重复项
.drop_duplicate(subset=None, keep='first', inplace=False)   
  • subset 列的标签,或者传入一个标签列表,subset=[‘a’,‘b’]这种,只有指定列都重复的时候才会删除
  • keep 选择需要保留的重复值,有三个选项, first:保留第一次出现的行, last:保留最后一次出现的行,False:全删掉
  • inplace 传入布尔值,执行删除后,是否把结果赋值给原变量。比如df.drop_duplicates()之后,你可以选择将结果赋值给新的变量data=df.drop_duplicates(),也可以通过inplace参数,df.drop_duplicates(inplace=True),自动将结果赋值给df。

示例

temp_df.drop_duplicates(inplace=True)
temp_df.drop_duplicates(inplace=True, keep=False)
pandas删除null值

.isnull() 检测null值,返回的是布尔值,可以使用sum()方法来统计每一列的空值数

.dropna(axis=0) 删除出现空值项的行,axis=1指轴1,即列,轴0是行,还有一个参数how=“any”,默认是只要有缺失值就删除整行或者列,如果how='all’时,是当整行是空值是才会执行删除

示例

import pandas as pd
import numpy as np

a = pd.DataFrame({"id": np.arange(1, 11),
                  "age": np.array([12, 34, 21, 32, np.NaN, 31, np.NaN, 3, 1, 2])})
# print(a.isnull().sum())
a = a.dropna()
print(a)

输出

   id   age
0   1  12.0
1   2  34.0
2   3  21.0
3   4  32.0
5   6  31.0
7   8   3.0
8   9   1.0
9  10   2.0
Pandas填充空值

填充空值可以使用平均值或者指定某一个值将空值给填充上,填充空值使用.fillna()函数

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

功能:使用字典的方法填充NA/Nan值

参数:

  • value 变量、字典、Series、DataFrame,用于填充缺失值
  • method {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认值 None ; 在Series中使用方法填充空白(‘backfill’, ‘bfill’向前填充,‘pad’, ‘ffill’向后填充)
  • axis {0 or ‘index’, 1 or ‘columns’}

示例

import pandas as pd
import numpy as np

a = pd.DataFrame({"id": np.arange(1, 11),
                  "age": np.array([12, 34, 21, 32, np.NaN, 31, np.NaN, 3, 1, 2])})
print(a.isnull().sum())

输出

id     0
age    2
dtype: int64

获取平均值

a_mean = a.mean()
print(a_mean)

输出

id      5.5
age    17.0
dtype: float64

用平均值替换空值

a.fillna(a_mean, inplace=True)
print(a)

输出

   id   age
0   1  12.0
1   2  34.0
2   3  21.0
3   4  32.0
4   5  17.0
5   6  31.0
6   7  17.0
7   8   3.0
8   9   1.0
9  10   2.0

Pandas可视化

Pandas的另一个优点是与Matplotlib的集成,可以直接绘制DataFrame和Series。

示例1

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10))
s.plot()
plt.show()
示例2
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randn(10, 4).cumsum(0),
                  columns=['A', 'B', 'C', 'D'],
                  index=np.arange(0, 100, 10))
df.plot()
plt.show()

三、Matplotlib库

绘图时常用的功能

plt.ylabel() 是y轴的标签
plt.xlabel() 是x轴的标签
plt.savefig() 将输出图形存储为文件,默认PNG格式,可以通过dpi修改输出质量
plt.plot(x,y) 当有两个以上参数时,按照X轴和Y轴顺序绘制数据点
plt.axis([x1,x2,y1,y1]) 是表示x轴和y轴的取值范围
plt.legend() 是用来显示图例的,当图里有图例label,必须调用
plt.show() 使用来显示图形的
plt.title() 对图形整体增加文本标签(显示在图形正上方)
plt.text() 在任意位置增加文本
plt.annotate() 在图形中增加带箭头的注解
plt.grid(True) 是显示网格线

示例

import matplotlib.pyplot as plt
plt.plot([3,4,5,4,3])
plt.savefig(r"C:\Users\Administrator\Desktop\text",dpi=600) #PNG文件
plt.show()
绘制线图

线图使用的是plt.plot()来进行绘制
线图是最简单的图形,它一般表示y=f(x)这样中函数关系,给定一组x的值,得到一组y的值,一次画出各个点,再把他们连接在一起就成了一个线图了

plt.plot(x, y, format_string, **kwargs)

x和y是代表各轴的值
format_string: 控制曲线的格式字符串,由颜色字符、风格字符和标记字符组成,可选
**kwargs: 第二组或更多(x,y,format_string)

颜色字符:风格字符:标记字符
b 蓝色
g 绿色
r 红色
c 青绿色 cyan
m 洋红色 magenta
y 黄色
k 黑色
w 白色
#008000 RGB某颜色
0.8 灰度值字符串
- 实线
—— 破折线
-. 点划线
: 虚线
’’ ‘’ 无线条
. 点标记
, 像素标记(极小点)
o 实心圆标记
v 倒三角标记
^ 上三角标记
> 右三角标记
< 左三角标记
1 下花三角标记
2 上花三角标记
3 左花三角标记
4 右花三角标记
s 实心方形标记
p 实心五角标记
* 星形标记
h 坚六边形标记
H 横六边形标记
+ 十字标记
x x标记
D 菱形标记
d 瘦菱形标记
垂直线标记

示例1

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 10)  # 利用numpy得到0到1之间的10位数
y = x  # 将x赋值给y
plt.plot(x, y, label="y=x")  # 利用.plot并且给定x和y轴的值,在给定label图例
plt.legend()  # 这个是用来显示图例的,没这个显示不了y=x
plt.show()  # 展示图形

示例2

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(10)
plt.plot(a,a*1.5,'go-',a,a*2.5,'b:h')
plt.show()

在这里插入图片描述

除了用上面方法显示线的样式外,还可以使用下面方法

color: 控制颜色, color=‘green’
linestyle: 线条风格, linestyle=‘dashed’
marker: 标记风格, marker=‘o’
markerfacecolor: 标记颜色, markerfacecolor=‘blue’
markersize: 标记尺寸, markersize=20

示例3

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,10,10)
plt.plot(x,x*2,color="green")
plt.show()
子图绘制
plt.subplot(nrows, ncols, plot_number)

nrows 是表示行数
ncols 是表示列数
plot_number 是表示当前绘图的位置

例如:创建一个1行两列的区域,并且在第一个位置上绘制图:plt.subplot(1, 2, 1)

示例1

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,10,10)
plt.subplot(1,2,1)
plt.plot(x,x*2,label="y=x*2")
plt.legend()
plt.subplot(1,2,2)
plt.plot(x,x*5,label="y=x*5")
plt.legend()
plt.show()

如果在subplot中加上projection='polar’就会将图形改变成圆形状的
如:
plt.subplot(3,3,8,projection=‘polar’)

pyplot的中文显示

第一种方法:

pyplot的中文显示的第一种方法:
pyplot并不默认支持中文显示,需要rcParams修改字体实现

rcParams的缺点就是定义的是整个图里面的字体样式,如果不想整个显示,就使用第二种方法

如:

import matplotlib
matplotlib.rcParams['font.family']='SimHei'  #SimHei是表示黑体

属性

属性中文字体种类
``‘font.family’用于显示字体的名字<br/>‘font.style’字体风格,正常'normal'或 斜体'italic'<br/>'font.size’字体大小,整数字号或者'large'、'x‐small' |rcParams[‘font.family’]<br/>SimHei中文黑体<br/>Kaiti中文楷体<br/>LiSu中文隶书<br/>FangSong中文仿宋<br/>YouYuan中文幼圆<br/>STSong` 华文宋体

示例1

import matplotlib.pyplot as plt
import numpy as np
import matplotlib

matplotlib.rcParams['font.family']='STSong'
matplotlib.rcParams['font.size']=20

a = np.arange(0.0,5.0,0.02)
plt.xlabel("横轴:时间")
plt.ylabel("众轴:振幅")
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

第二种方法:

在有中文输出的地方,增加一个属性:fontpropertiesfontsize

fontproperties表示字体
fontsize表示字体大小

示例2

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0.0,5.0,0.02)
plt.xlabel("横轴:时间",fontproperties='SimHei',fontsize=20)
plt.ylabel("众轴:振幅",fontproperties='SimHei',fontsize=10)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()
复杂的子图绘制区域
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)

GridSpec 表示的是创建的图形他的行和列,如3行3列(3,3)
CurSpec 表示的是我们当前要绘制的位置的行和列的索引。如:第一行第二例(0,1)
colspan 表示的是占用该列的列数。如我们占用的是两列,colspan=2。这里表示的是第一行和第二行的第一列
rowspan 表示的是占用该行的列数。如我们占用的是两行,rowspan=2。这里表示的是第一列和第二列的第一行

示例

plt.subplot2grid((3,3),(1,0),colspan=2)

第一个参数是生成一个三行三列的图
第二个参数在第二行第一列的位置
第三个参数是我们占用的列为两列

绘制拼图

饼图是用表示百分比数据可视化的
拼图是用的是plt.pie()来进行绘制

示例1

import matplotlib.pyplot as plt

plt.pie([1, 2], labels=['A', 'B'], autopct="%0.1f%%")
# plt.legend()
plt.show()
  • 这里的plt.pie是指这个图像是拼图的,里面的[1,2]是指的是比例为1/3,2/3,如果是[2,4]就是指2/6,4/6。
  • labels=[‘A’,‘B’]是指每个值对应的图例,他会在对应的扇形上指出来,如果在加上plt.legend()就会在叫了多一个图例
  • autopct="%0.1f%%",是指每个数的格式化,%0.1f是指保留小数点一位数,%%是用来显示一个%号

控制饼图颜色:

控制饼图颜色在plt.pie()中多写一个配置colors=[],在这里面写着对应的扇形颜色的小写首字母,也可以是全写
如:colors=[“r”,“y”]

示例2

import matplotlib.pyplot as plt

plt.pie([1,2],labels=['A','B'],colors=["y","r"],autopct="%0.1f%%")
plt.legend()
plt.show()
绘制散点图

散点图是用来表示平面上(x,y)对数据的分布状况

散点图一般格式为:plt.scatter(x,y,...)

示例1

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1,2,3,4,5,6,7,8,9,10])
y = np.array([2,5,3,7,9,0,10,3,5,3])
plt.scatter(x,y)
plt.show()

示例2

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1,1,50)
y = x*x
plt.scatter(x,y,c="red",s=10,label="y=x*x")#这里的s是表示散点的大小,默认为20
plt.legend()
plt.show()

这里的s=10是表示散点的大小,默认为20

在散点图的点上写文字

利用plt.text()方法来写
例如:
plt.text(x[0],y[0],"A"),这样表示在x[0]和y[0]位置上写如果想要改变x和y轴的位置
如:plt.text(x[0]+0.2,y[0],"A")这样就是在x轴方向偏移0.2的距离

也可以写x和y轴位置plt.text(1,3,"A")

绘制柱状图

柱状图经常显示一些离散数据,是使用方法.bar(x,t,....)进行构成的
在柱状图上x轴是一组字符串的列表

示例1

import matplotlib.pyplot as plt

c = ["2016", "2017", "2018", "2019"]
n = [5100, 3455, 3233, 6433]
x = range(len(c))
plt.bar(x, n, width=0.3, color=["b", "r", "y", "g"])
plt.xticks(x, c)  # 通过xticks()将年份值标注到各个坐标值的位置上
plt.ylabel("Profit")
plt.xlabel("Year")
plt.show()

这里的width是指柱的宽度,color是柱的颜色
在这里是使用plt.xticks(x,c)将年份值标注到各个坐标值的位置上
如果不想怎么做也可以直接将c的坐标轴的值直接附上去
.ylabel().xlabel()是给x轴和y轴的标注名称

示例2

import matplotlib.pyplot as plt

c = ["2016", "2017", "2018", "2019"]
n = [5100, 3455, 3233, 6433]

plt.bar(c,n,width=0.3)
plt.text(c[0],n[0],"5100")
plt.text(c[1],n[1],"3455")
plt.text(c[2],n[2],"3233")
plt.text(c[3],n[3],"6433")
plt.show()

在这使用text()方法是在柱子上表名柱子的值

如果想在给定y轴的值的距离区间可以使用.yticks(),如:plt.yticks(range(0,60,10)),这样就是[0,10,20,30,40,50]

定义y轴的范围使用ylim()
例如:
plt.ylim(0,y.max()+4)
表示在y中最大值上添加4的长度

.scatter(x,y,…)`

示例1

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1,2,3,4,5,6,7,8,9,10])
y = np.array([2,5,3,7,9,0,10,3,5,3])
plt.scatter(x,y)
plt.show()

示例2

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1,1,50)
y = x*x
plt.scatter(x,y,c="red",s=10,label="y=x*x")#这里的s是表示散点的大小,默认为20
plt.legend()
plt.show()

这里的s=10是表示散点的大小,默认为20

在散点图的点上写文字

利用plt.text()方法来写
例如:
plt.text(x[0],y[0],"A"),这样表示在x[0]和y[0]位置上写如果想要改变x和y轴的位置
如:plt.text(x[0]+0.2,y[0],"A")这样就是在x轴方向偏移0.2的距离

也可以写x和y轴位置plt.text(1,3,"A")

绘制柱状图

柱状图经常显示一些离散数据,是使用方法.bar(x,t,....)进行构成的
在柱状图上x轴是一组字符串的列表

示例1

import matplotlib.pyplot as plt

c = ["2016", "2017", "2018", "2019"]
n = [5100, 3455, 3233, 6433]
x = range(len(c))
plt.bar(x, n, width=0.3, color=["b", "r", "y", "g"])
plt.xticks(x, c)  # 通过xticks()将年份值标注到各个坐标值的位置上
plt.ylabel("Profit")
plt.xlabel("Year")
plt.show()

这里的width是指柱的宽度,color是柱的颜色
在这里是使用plt.xticks(x,c)将年份值标注到各个坐标值的位置上
如果不想怎么做也可以直接将c的坐标轴的值直接附上去
.ylabel().xlabel()是给x轴和y轴的标注名称

示例2

import matplotlib.pyplot as plt

c = ["2016", "2017", "2018", "2019"]
n = [5100, 3455, 3233, 6433]

plt.bar(c,n,width=0.3)
plt.text(c[0],n[0],"5100")
plt.text(c[1],n[1],"3455")
plt.text(c[2],n[2],"3233")
plt.text(c[3],n[3],"6433")
plt.show()

在这使用text()方法是在柱子上表名柱子的值

如果想在给定y轴的值的距离区间可以使用.yticks(),如:plt.yticks(range(0,60,10)),这样就是[0,10,20,30,40,50]

定义y轴的范围使用ylim()
例如:
plt.ylim(0,y.max()+4)
表示在y中最大值上添加4的长度

标题用plt.title()是给标题的方法

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值