当前位置: 萬仟网 > IT编程>脚本>Python > Python数据分析之pandas基本功能讲解

Python数据分析之pandas基本功能讲解

331  人参与 | 时间:2018-01-27 | 我要评论
pandas的基本功能 重新索引

不存在的索引都用同一个值填充:

obj.reindex(['a','b','c','d','e'],fill_value=0)
out:
a   -5.3
b   7.2
C   3.6
d   4.5
e   0.0
#如果没有fill_value则不存在的索引用NaN缺失值引入。

对于有序索引,range(6)或者[‘a’,’b’,’c’,’d’,’e’,’f’]。

用前向值填充:method =‘ffill’或者method = ‘pad’ 前面没有则NaN

用后向值填充:method = ‘bfill’ 或者 method = ‘backfill’ 后面没有则NaN

In [84]:obj3 = Series(['blue','purple','yellow'],index=[o,2,4])
In [85]:obj3.reindex(range(6),method='ffill')
0ut[85]:
0   blue
1   blue
2   purple
3   purple
4   yellow
5   yellow

上面是Series上的重新索引,DataFrame上也很相似。只传入一个序列,则会重新索引行,使用columns可重新索引列。也可以通时都重新索引,但插值只能按行应用。

In[92]:frame.reindex(index=['a','b','c,'d'],method='ffil1',
        columns=states)
0ut[92]:
  Texas Utah California
a   1   NaN     2
b   1   NaN     2   
#b这一行本来不存在  都用上一行的填充了
C   4   NaN     5
d   7   NaN     8

简单的做法是使用ix如:

In[93]:frame.ix[['a','b','c','d'],states]
0ut[93]:
    Texas  Utah California
a       1   NaN     2
b       NaN NaN     NaN
C       4   NaN     5
d       7   NaN     8

总结下reindex的参数:

参数 说明 index 用作索引的新序列。既可以是Index实例,也可以是其他序列型的Python数据结构。Index会被完全使用,就像没有任何复制一样 method 插值(填充)方式 fill_value 在重新索引的过程中,需要引入缺失值时使用的替代值 limit 前向或后向填充时的最大填充量 level 在Multilndex的指定级别上匹配简单索引,否则选取其子集 copy 默认为True,无论如何都复制;如果为False,则新旧相等就不复制 丢弃指定轴上的项

obj.drop([‘a’,’c’])

data.drop([‘Colorado’,’Ohio’]) #默认0轴 即行索引

data.drop(‘two’,axis = 1)#指明1轴 即列

索引,选取和过滤

Series索引:obj[2:4](2和3) obj[[‘b’,’a’,’d’]]

obj[obj<2](可以把值小于2的都选出来)

但是利用标签的切片运算有一定的不同,它的末端是包含的:

obj['b':'c']
out:b  1
    c  2

DataFrame索引:

In [112]:data = DataFrame(np.arange(16).reshape((4,4)),
                index=[ohio','Colorado',‘Utah',‘New York'],
                columns=['one','two',‘three',‘four])
In[113]:data
0ut[113]:
            one two three four
0hio        0    1    2     3
Colorado    4    5    6     7
Utah        8    9    10    11
New York    12  13    14    15

In [115]:data[['three',‘one']]
0ut[115]:
            three   one
Ohio        2       o
Colorado    6       4
Utah        10      8
New York    14      12
#但是通过切片和布尔数组 选取的是行!!!
In [116]:data[:2]
0ut[116]:
            one two three four
0hio        0   1   2       3   
Colorado    4   5   6       7

In[117]:data[data['three']>5]
0ut[117]:
            one two three four
Colorado    4   5    6      7   
Utah        8   9   10      11
New York    12  13  14      15

另外一种通过data<5这种布尔型的结果。

In [118]:data<5
out[118]:
            one   two   three  four
Ohio        True  True  True  True
Colorado    True  False False False
Utah        False False False False
New York    False False False False
In[119]:data[data<5]=o
In[120]:data
0ut[120]:
            one two three four
ohio        o   o   o       o
Colorado    0   5   6       7
Utah        8   9   10      11
New York    12  13  14      15

感觉像不像之前的ndarray?

arr=np.arange(10)
arr<5
out:array([ True,True,Irue,True,True,False,False,False,False,False],dtype=bool)
arr[arr <5]=5
out:array([5,5,5,5,5,5,6,7,8,9])

专门的索引字段ix用来选取行和列的子集。

In[122]:data.ix[['Colorado','Utah'],[3,0,1]]
0ut[122]:
        four one two
Colorado 7    0   5
Utah    11    8   9
In [125]:data.ix[data.three>5,:3]
0ut[125]:
            one two three
Colorado     0   5    6
Utah         8   9   10
New York    12   13  14

这里写图片描述

这里写图片描述

函数应用和映射

NumPy的ufuncs操作pandas对象:

np.abs(frame)#对每个值都取绝对值

apply可以把函数用到各列或各行所形成的一维数组上:

f = lambda x: x.max() - x.min()
frame.apply(f)#取每列最大值与最小值的差值
frame.apply(f,axis=1)#取每行最大值与最小值的差值
def f(x):
    return Series([x.min(),x.max()],index=['min','max'])
frame.apply(f)
out:        b       d       e
min -0.555730   0.281746    -1.296221
max 1.246435    1.965781    1.393406

还有此外,元素级的Python函数也是可以用的。假如你想得到frame中各个浮点值的格式化字符串,使用applymap即可:

In[166]:format=lambda x:'%.2f'%x
In[167]:frame.applymap(format)
0ut[167]:
        b    d     e
Utah  -0.20 0.48 -0.52
Ohio  -0.56 1.97 1.39
Texas  0.09 0.28 0.77
0regon 1.25 1.01 -1.30
之所以叫做applymap,是因为Series有一个用于应用元素级函数的map方法:
In[168]:frame['e'].map(format)
0ut[168]:
Utah -0.52
0hio 1.39
Texas 0.77
0regon -1.30
Name:e

总结:大部分还是pandas对Series,df的重新索引,以及索引和用函数选取你要的数据。

ps.这两天写了个小爬虫,这两天脑子有点乱,所以写的乱七八糟的,小错误也犯了一堆。整理一下思路和代码,过两天发出来。实际写的时候发现之前的知识又生疏了。。。好尴尬,学的时候的感觉就是:对,不这么写怎么写,这格式就应该是这样的,这么写就能达到这种意思。 但是自己实际去两手空空的写的时候就是懵的。。。老是网上找资料,找格式啥的。估计还是用的太少,大家也应该学的时候多练多写,不会的多找资料。然后找个身边的能做的小的项目来练手,就能发现自己的差距了,继续努力!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

◎已有 0 人评论

Copyright © 2019  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com