Python数据分析(二)
打卡第六天啦!!!
Numpy库(二)
NAN和INF值的认识
import numpy as np
data = np.random.randint(0,10,size=(3,5))
data = data.astype(np.float)
data[0,1] = np.NAN
print(data)
print(data/0)
print(np.nan == np.nan)
NAN和INF值的处理
- NAN: Not A Number的简写,不是一个数字,但是他是属于浮点类型。
- INF:无穷大,在除数为0的情况下会出现INF。
- NAN和所有的值进行计算结果都是等于NAN
- NAN !=NAN
- 可以通过np.isnan来判断某个值是不是NAN。
- 处理值的时候,可以通过删除NAN的形式进行处理,也可以通过值的替换进行处理。
- np.delete比较特殊,他通过axis=0来代表行,而其他大部分函数是通过axis=1来代表行。
print(data)
np.isnan(data)
print(data[~np.isnan(data)])
scores = np.loadtxt("scores.csv",dtype=np.str,delimiter=",",skiprows=1)
scores = scores.astype('U3')
scores[scores == ""] = np.NAN
scores1 = scores.astype(np.float)
scores1[np.isnan(scores1)] = 0
scores1.sum(axis=0)
scores2 = scores.astype(np.float)
for x in range(scores2.shape[1]):
col = scores2[:,x]
non_nan_col = col[~np.isnan(col)]
mean = non_nan_col.mean()
col[np.isnan(col)] = mean
pass
print(scores2)
random模块
import numpy as np
np.random.seed(1)
np.random.rand()
np.random.rand(2,3)
np.random.randn()
data = np.arange(5)
np.random.choice(data,size=(3,4))
np.random.choice(5,3)
data1 = np.arange(10)
print(data1)
np.random.shuffle(data1)
print(data1)
axis轴理解
- 最外面的括号代表着axis=0,依次往里的括号对应的axis的计数就依次加1
- 操作方式:如果指定轴进行相关的操作,那么他会使用轴下的每个直接子元素的第0个、第1个、第2个…分别进行相关操作,以上图为例,当axis=0时,对应(0,2)和(1,3),当axis=1时,对应(0,1)和(2,3)。
a = np.arange(0,4).reshape(2,2)
print(a)
print(a.sum(axis=0))
print(a.sum(axis=1))
print(a.max(axis=0))
print(a.max(axis=1))
y = np.arange(24).reshape(2,2,6)
print(y)
y.max(axis=0)
y.max(axis=1)
y.max(axis=2)
- np.delete是直接删除指定轴下的第几个直接子元素
b = np.delete(a,0,axis=0)
print(b)
通用函数
一元函数
a = np.random.uniform(-10,10,size=(3,5))
print(a)
np.abs(a)
np.sqrt(np.abs(a))
np.square(a)
np.exp(a)
np.log(np.abs(a))
np.sign(a)
np.ceil(a)
np.floor(a)
np.rint(a)
np.modf(a)
np.sin(a)
二元函数
np.add(a,np.random.randint(0,5,size=(3,1)))
np.greater(a,0)
np.logical_and(a>0,a<5)
np.logical_or(a>5,a<0)
聚合函数
np.sum(a,axis=0)
np.prod(a,axis=0)
np.mean(a,axis=0)
np.std(a,axis=0)
np.var(a,axis=0)
np.min(a,axis=0)
np.argmin(a,axis=0)
布尔判断函数
只要有一个元素为0,则all方法就返回False,只要有一个元素不为0,则any方法就返回True
b = np.arange(0,10)
b.all()
b.any()
排序
np.sort(a)
np.sort(a,axis=0)
np.argsort(a)
np.argsort(a,axis=0)
-np.sort(-a)
indexes = np.argsort(-a)
np.take(a,indexes)
其他函数
c = np.random.randint(0,100,size=(3,20))
np.apply_along_axis(lambda x:x[np.logical_and(x!=x.max(),x!=x.min())].mean(),axis=1,arr=c)
np.linspace(0,10,9)
d = np.random.randint(0,10,size=(3,5))
np.unique(d)
np.unique(d,return_counts=True)
pandas库(一)
介绍
- 强大的分析结构化数据的工具集
- 基础是Numpy,提供了高性能矩阵的运算
- 应用于数据挖掘,数据分析
- 提供数据清洗功能
import pandas as pd
Series
Series介绍
- 一维标记的数组型对象
- 由数据和索引组成
Series创建
- 通过list创建
s1 = pd.Series([1,2,3,4,5])
print(s1)
print(type(s1))
- 通过数组创建
import numpy as np
arr1 = np.arange(1,6)
s2 = pd.Series(arr1)
print(s2)
s3 = pd.Series(arr1,index=['a','b','c','d','e'])
print(s3)
- 通过字典创建
dict = {'name':'潘小雷','age':20}
s4 = pd.Series(dict,index=['name','age'])
print(s4)
Series基本用法
- isnull和notnull检查缺失值
s4.isnull()
s4.notnull()
- 通过索引获取数据
print(s4.index)
print(s4.values)
print(s4[0])
print(s4['name'])
print(s4[[0,2]])
print(s4[0:1])
print(s4['name':'age'])
print(s2[s2>3])
- 索引与数据的对应关系不被运算结果所影响
print(s2*2)
- name属性
s2.name = 'temp'
s2.index.name = 'year'
print(s2)
- head方法和tail方法截取其中数据
s2.head(3)
s2.tail(3)
DataFrame
DataFrame介绍
- 表格型的数据结构
- 含有一组有序的列,每列可以是不同类型的值
- 既有行索引,也有列索引
- 可以看作是由Series组成的字典(并且共用一个索引)
DataFrame构建
- 字典类
(1)数组、列表或元组组成的字典构造DataFrame
data = {'a':[1,2,3,4],
'b':(5,6,7,8),
'c':np.arange(9,13)}
frame = pd.DataFrame(data)
print(frame)
print(frame.index)
print(frame.columns)
print(frame.values)
frame = pd.DataFrame(data,index=['A','B','C','D'],columns=['a','b','c','d'])
print(frame)
(2)Series构成的字典构造DataFrame
pd1 = pd.DataFrame({'a':pd.Series(np.arange(3)),
'b':pd.Series(np.arange(3,5))})
print(pd1)
(3)字典构成的字典构造DataFrame
data1 = {'a':{'name':'潘小雷','age':20},
'b':{'name':'鲸鱼','age':20}}
pd2 = pd.DataFrame(data1)
print(pd2)
- 列表类
(1)2D ndarray构造DataFrame
arr1 = np.arange(12).reshape(4,3)
frame1 = pd.DataFrame(arr1)
print(frame1)
(2)字典构成的列表构造DataFrame
li = [{'name':'潘小雷','age':20},
{'name':'鲸鱼','age':20}]
frame2 = pd.DataFrame(li)
print(frame2)
(3)Series构成的列表构造DataFrame
list1 = [pd.Series([1,2,3]),pd.Series(np.random.rand(3))]
frame3 = pd.DataFrame(list1)
print(frame3)
- 需要注意的是,有两种方式较为类似,一种是字典构成的字典构造DataFrame,另外一种是字典构成的列表构造DataFrame,在两种构造方式中,可以看到,name和age的位置不同,一种是行索引,另一种是列索引
DataFrame基本使用
- T转置
pd5.T
- 通过列索引获取列数据
pd5['A']
- 增加列数据
pd5['D'] = 9
print(pd5)
- 删除列
del(pd5['D'])
print(pd5)
|