一、python数据分析numpy、pandas库的使用

python大数据与机器学习与商业实战

一、数据分析numpy、pandas、matploylib库的使用

1、列表与数组的区别

import numpy as np
a = [1,2,3,4]  ## 列表
b = np.array([1,2,3,4])   ##array数组
print(a)
print(b)
print(type(a))
print(type(b))
[1, 2, 3, 4]
[1 2 3 4]

# 通过索引和切片访问列表和数组中的元素
print(a[1])
print(b[1])
print(a[0:2]) #结果都为左闭右开,逗号分隔
print(b[0:2]) #左闭右开,空格分隔
2
2
[1, 2]
[1 2]

a、数组便于运算,乘法时列表是复制元素,数组是对每个单位做乘法

b、列表存储着一维数据,数组可以存储高维数据

#a
c = a * 2
d = b * 2
print(c)
print(d)
[1, 2, 3, 4, 1, 2, 3, 4]
[2 4 6 8]
#b
e = ([1,2],[3,4],[5,6])
f = np.array([[1,2],[3,4],[5,6]])
print(e)
print(f)
([1, 2], [3, 4], [5, 6])
[[1 2]
 [3 4]
 [5 6]]

2、创建数组的几个方法

a、np.array()

b、np.arange( , , ) 起始值(默认0),终止值,步长(默认1) !注意单词拼写

c、np.random 随机创建一维数组

np.random.randn(3) 创建一个符合标准正态分布的3个随机数

np.random.rand(3) 创建0-1中的三个随机数

二维数组

d、np.arange()+reshape()创建

e、np.random.randint( , , ) 创建随机整数 起始数,终止数,表示创建数组的大小

#a 
np.array([4,5,6])
array([4, 5, 6])
#b
np.arange(3,10,0.5)
array([3. , 3.5, 4. , 4.5, 5. , 5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. ,
       9.5])
#c1
np.random.randn(10)
array([-1.89651766, -0.28272691, -1.54592792,  2.98817033, -0.36047528,
       -0.16494408, -1.13499605,  0.19756287,  0.35139366,  0.12337039])
#c2
np.random.rand(10)
array([0.6005858 , 0.22557086, 0.58472974, 0.95913412, 0.13437665,
       0.41496966, 0.3050885 , 0.96969384, 0.68968672, 0.48570103])
#d 
np.arange(12).reshape(3,4)  #随机12个数 转换成3×4的排列
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
#e
np.random.randint(1,6,(3,4))
array([[2, 4, 2, 3],
       [1, 4, 5, 3],
       [2, 4, 4, 3]])

3、pandas库基础

panel data => pandas

数据结构1:Series 类似于NumPy创建的一维数组,不仅包含数值,也包含一组索引

#1
import pandas as pd
s1 = pd.Series(['张三','李四','王五'])
print(s1)
s1[2]  #可以通过s2定位到第2个元素
0    张三
1    李四
2    王五
dtype: object

'王五'

数据结构2:DataFrame 类似于NumPy库创建的二维数组,有行索引和列索引(从0开始的)

a 通过列表创建DataFrame数组

#2 通过列表创建DataFrame数组的方式
import pandas as pd
a = pd.DataFrame([[1,2],[3,4],[5,6]])
print(a)
   0  1
0  1  2
1  3  4
2  5  6
#自定义列索引(columns)和行索引(index)的名称
a = pd.DataFrame([[1,2],[3,4],[5,6]],columns=['data','score'],index=['A','B','C'])
a #jupyter notebook中可以用a表示print(a)
data score
A 1 2
B 3 4
C 5 6
#3 另一种创建DataFrame数组的方式
a = pd.DataFrame()
date = [1,3,5]
score = [2,4,6] #data与score的长度要一致
a['date'] = date
a['score'] = score
a
date score
0 1 2
1 3 4
2 5 6

b 通过字典创建DataFrame数组的方式

字典:

# 通过字典创建DataFrame数组,并自定义列索引
b = pd.DataFrame({'a':[1,3,5],'b':[2,4,6]},index=['X','Y','Z'])
b
a b
X 1 2
Y 3 4
Z 5 6
# 字典变为行索引用from_dict()函数将字典转换成DataFrame,
# 并设置orient参数为index,orient指定字典 键为列索引还是行索引,默认为columns
c = pd.DataFrame.from_dict({'a':[1,3,5],'b':[2,4,6]},orient='index')
print(c)
   0  1  2
a  1  3  5
b  2  4  6
# 使用DataFrame的T属性对DataFrame进行转置
b = pd.DataFrame({'a':[1,3,5],'b':[2,4,6]})
print(b)
print(b.T)#打印转置后的表格
   a  b
0  1  2
1  3  4
2  5  6
   0  1  2
a  1  3  5
b  2  4  6

c 通过二维数组创建DataFrame

d = pd.DataFrame(np.arange(12).reshape(3,4),index=[1,2,3],columns=['A','B','C','D'])
d
A B C D
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11

4 修改行索引或者列索引名称

# 使用rename函数
a = pd.DataFrame([[1,2],[3,4]],columns=['date','score'],index=['A','B'])
print(a)
   date  score
A     1      2
B     3      4
# rename函数重命名
a = a.rename(index={'A':'阿里','B':'腾讯'},columns={'date':'日期','score':'分数'})
print(a)
    日期  分数
阿里   1   2
腾讯   3   4
# values查看index的值
a.index.values
print(a)
    日期  分数
阿里   1   2
腾讯   3   4
# set_index()函数 将行索引修改为某列的内容
# 修改inplace参数为true 直接修改原值
a = a.set_index('日期')
a
分数
日期
1 2
3 4
a = a.reset_index() #把行索引换成数字索引
a
index 日期 分数
0 0 1 2
1 1 3 4