实训笔记20190806--pandas

这篇实训笔记主要介绍了pandas库的数据处理,包括文件读取、数据过滤、缺省值NaN的处理、数学统计方法如相关系数和协方差,以及唯一值、值计数和成员资格的操作。还讲解了层次索引在数据处理中的应用。
摘要由CSDN通过智能技术生成

文件读取

  • 文件的读取操作
    1. 文件的读取操作指的是将磁盘,第三方的数据读取到内存里面

数据的来源?
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里面的参数
  1. sep 将数据安给定分隔符分割
  2. 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
notnullisnull的否定式

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

唯一值、值计数以及成员资格

  1. 唯一值:unique()方法用于获取Series中的唯一值数组(去重数据后的数组)–避免重复计数
  2. 值计数:value_counts()方法用于计算一个Series中各值的出现频率
  3. 成员资格: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值