文件读取
- 文件的读取操作
- 文件的读取操作指的是将磁盘,第三方的数据读取到内存里面
数据的来源?
1. 第三方数据. eg:jd,淘宝都是由第三方接口访问提供的数据,简称;接口数据
2. 系统本身的访问数据, eg:B/S架构的数据,保存到数据库里的data
3. 基于浏览器的缓存数据,其实缓存数据也具有参考价值,提供缓存数据,分析出客户的不同群体
eg:QQ,微信等广告----缓存数据可以找到意向客户群体–企业大量使用
- 数据的读取方式
标识符:read_xxx
例如Lread_csv,read.excel
在Python数据解析,人工智能的数据集,数据挖掘等操作里面.数据一般都是采用CSV后缀why?
1. CSV格式数据传输数据极快,CSV也可以读取其他类型的数据格式,兼容性好
2. CSV数据格式的数据很容易维护,数据的index很清晰,适合做大数据分析
3. CSV数据在实际企业开发里面,用于保存大量的数据库的备份格式,数据库的还原数据
4. 在硬件角度,大家的U盘,移动硬盘等数据恢复也需要CSV格式
以下代码均需要调包
import numpy as np
import pandas as pd
- pandas里面的参数
- sep 将数据安给定分隔符分割
- header=none 给数据指定索引
df01=pd.read_csv('file/csvfile.csv',sep=';')
df02=pd.read_excel('file/csvfile.xlsx')
print(df01)
print(df02)
name,age,id
0 ni,21,1001
1 zhang,21,1002
2 wang,22,1003
3 li ,23,1004
name age id
0 ni 21 1001
1 zhang 21 1002
2 wang 22 1003
3 li 23 1004
数据过滤
pandas:数据过滤获取:指的是将之前的数据提供DataFrame过滤完之后,在形成一个新的DataFrame----操作新的DataFrame
在pandas数据过滤里面通过切片的永远都是数据标签,而不是index,如果切的属性不存在,程序也不会报错,index始终存在,此处的index等价于一个主键
df02[df02.columns[2:]]#切片切的是数据属性
df03=pd.DataFrame({
'name':['mi','zhang','wang','li','cui'],
'age':[12,23,34,45,56],
'sex':['男','女','男','男','女'],
'classid':3
},index=['one','two','three','four','five'])
print(df03)
print(df03[df03.columns[2:]])
name age sex classid
one mi 12 男 3
two zhang 23 女 3
three wang 34 男 3
four li 45 男 3
five cui 56 女 3
sex classid
one 男 3
two 女 3
three 男 3
four 男 3
five 女 3
缺省值NaN处理方法
对于DataFrame/Series中的NaN一般采取的方式为删除对应的列/行或者填充一个默认值
方法 | 说明 |
---|---|
dropna | 根据标签的值中是否存在缺失数据对轴标签进行过滤(删除), 可以通过阈值的调节对缺失值的容忍度 |
fillna | 用指定值或者插值的方式填充缺失数据,比如: ffill或者bfill |
isnull | 返回一个含有布尔值的对象,这些布尔值表示那些值是缺失值NA |
notnull | isnull的否定式 |
df05.loc[1:2,1]=np.NaN, 可以处理切片
df05.loc[1:2:1]=np.NaN, 切片操作不能处理
#定义一个1-9的随机数,4行4列
df05=pd.DataFrame(np.random.randint(1,9,[4,4]))
print(df05)
print()
df05.loc[1:2,1]=np.NaN#缺省值NaN
#通过loc,就是将NaN作为一个值给df05
#通过dropna删除NaN
print(df05)
print('---------------------')
print(df05.dropna())
#print(df05.dropna(how='all'))#丢失全部为NaN的行
print('---------------------')
print(df05.dropna(axis=1))#删除含有NaN的列
print(df05.dropna(axis=0))#行
print('------用1填充NaN------')
print(df05.fillna(1))
print('--指定行列插入----指定行列的区域--')
print(df05.fillna({0:1,1:1,2:2,4:4}))
0 1 2 3
0 2 8 3 3
1 3 1 6 6
2 7 2 4 2
3 3 5 7 2
0 1 2 3
0 2 8.0 3 3
1 3 NaN 6 6
2 7 NaN 4 2
3 3 5.0 7 2
---------------------
0 1 2 3
0 2 8.0 3 3
3 3 5.0 7 2
---------------------
0 2 3
0 2 3 3
1 3 6 6
2 7 4 2
3 3 7 2
0 1 2 3
0 2 8.0 3 3
3 3 5.0 7 2
#用1填充NaN:
0 1 2 3
0 2 8.0 3 3
1 3 1.0 6 6
2 7 1.0 4 2
3 3 5.0 7 2
指定行列插入----指定行列的区域:
0 1 2 3
0 2 8.0 3 3
1 3 1.0 6 6
2 7 1.0 4 2
3 3 5.0 7 2
常用的数学统计方法
方法 | 说明 |
---|---|
count | 计算非NA值的数量 |
describe | 针对Series或各DataFrame列计算总统计值 |
min/max | 计算最大值、最小值 |
argmin、argmax | 计算能够获取到最小值和最大值的索引位置(整数) |
idxmin、idxmax | 计算能够获取到最小值和最大值的索引值 |
quantile | 计算样本的分位数(0到1) |
sum | 值的总和 |
mean | 值的平均数 |
median | 值的中位数 |
mad | 根据平均值计算平均绝对距离差 |
var | 样本数值的方差 |
std | 样本值的标准差 |
cumsum | 样本值的累计和 |
cummin、cummax | 样本的累计最小值、最大值 |
cumprod | 样本值的累计积 |
pct_change | 计算百分数变化 |
pd03=pd.DataFrame(np.random.randint(0,100,size=(10,10)))
print(pd03)
print(pd03.sum()) # 按列求和
print(pd03.sum(axis=1)) # axis=1 按行求和 axis=0 按列求和
print('----------中位数-------------')
print(pd03.median()) # 按列求中位数 先排序
print('----------平均值--------------')
print(pd03.mean()) # 按列求平均值
print('----------最大值--------------')
print(pd03.max())
print('----------最小值--------------')
print(pd03.min())
print('-----------方差---------------')
print(pd03.var())
print('----------标准差--------------')
print(pd03.std())
0 1 2 3 4 5 6 7 8 9
0 59 23 65 83 67 56 49 37 13 86
1 11 52 99 24 32 28 88 72 6 38
2 46 47 87 27 94 63 24 67 7 91
3 55 91 55 0 96 28 45 28 61 54
4 20 64 46 45 9 10 95 46 60 10
5 34 34 8 39 64 56 81 90 6 10
6 1 35 62 88 19 5 41 11 55 69
7 94 88 63 4 80 71 68 73 44 38
8 19 22 37 29 17 34 82 15 13 64
9 4 0 27 44 78 9 72 96 79 96
0 343
1 456
2 549
3 383
4 556
5 360
6 645
7 535
8 344
9 556
dtype: int64
0 538
1 450
2 553
3 513
4 405
5 422
6 386
7 623
8 332
9 505
dtype: int64
----------中位数-------------
0 27.0
1 41.0
2 58.5
3 34.0
4 65.5
5 31.0
6 70.0
7 56.5
8 28.5
9 59.0
dtype: float64
----------平均值--------------
0 34.3
1 45.6
2 54.9
3 38.3
4 55.6
5 36.0
6 64.5
7 53.5
8 34.4
9 55.6
dtype: float64
----------最大值--------------
0 94
1 91
2 99
3 88
4 96
5 71
6 95
7 96
8 79
9 96
dtype: int64
----------最小值--------------
0 1
1 0
2 8
3 0
4 9
5 5
6 24
7 11
8 6
9 10
dtype: int64
-----------方差---------------
0 860.900000
1 848.266667
2 730.100000
3 845.344444
4 1106.933333
5 583.555556
6 549.166667
7 923.388889
8 794.266667
9 982.266667
dtype: float64
----------标准差--------------
0 29.341097
1 29.125018
2 27.020363
3 29.074808
4 33.270608
5 24.156895
6 23.434305
7 30.387315
8 28.182737
9 31.341134
dtype: float64
相关系数与协方差
相关系数(Correlation coefficient):反映两个样本/样本之间的相互关系以及之间的相关程度。在COV的基础上进行了无量纲化操作,也就是进行了标准化操作。corr()
协方差(Covariance, COV):反映两个样本/变量之间的相互关系以及之间的相关程度。 cov()
df06=pd.DataFrame({
'GDP':[12,23,34,45,56],
'air_tem':[23,24,25,26,27],
'year':['2001','2001','2003','2004','2005']
})
print(df06)
print(df06['GDP'].cov(df06['air_tem']))#协方差
print(df06.corr())#相关系数
GDP air_tem year
0 12 23 2001
1 23 24 2001
2 34 25 2003
3 45 26 2004
4 56 27 2005
27.5
GDP air_tem
GDP 1.0 1.0
air_tem 1.0 1.0
唯一值、值计数以及成员资格
- 唯一值:unique()方法用于获取Series中的唯一值数组(去重数据后的数组)–避免重复计数
- 值计数:value_counts()方法用于计算一个Series中各值的出现频率
- 成员资格:isin()方法用于判断矢量化集合的成员资格,可用于选取Series中或者DataFrame中列中数据的子集
ser01=pd.Series(['a','b','c','d','e','b','c','d','h'])
print(ser01.unique())
print(ser01.value_counts())
#默认按照正常顺序ascending=Fasle
print(ser01.value_counts(ascending=True))#由低到高
['a' 'b' 'c' 'd' 'e' 'h']
c 2
d 2
b 2
e 1
h 1
a 1
dtype: int64
a 1
h 1
e 1
b 2
d 2
c 2
dtype: int64
层次索引
在某一个方向拥有多个(两个及两个以上)索引级别
通过层次化索引,pandas能够以较低维度形式处理高纬度的数据
通过层次化索引,可以按照层次统计数据
层次索引包括Series层次索引和DataFrame层次索引
data=pd.Series([988.44,95859,3949,32554,1235],
index=[
['2001','2001','2001','2002','2002'],
[u'苹果',u',香蕉',u'西瓜',u'苹果',u'西瓜']
])
print(data)
2001 苹果 988.44
,香蕉 95859.00
西瓜 3949.00
2002 苹果 32554.00
西瓜 1235.00
dtype: float64