pandas入门学习四

来源:互联网 发布:手机视频相册制作软件 编辑:程序博客网 时间:2024/05/17 07:08

本文是学习《利用Python进行数据分析》的部分笔记,在这里感谢作者

pandas基本功能二:

1,:函数应用和映射

Numpy的ufuncs(元素级函数方法)也可以用于操作pandas对象

frame=DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])frameOut[5]:                b         d         eUtah    1.021003 -0.813102 -0.111531Ohio   -0.450382 -0.532916  0.103158Texas  -0.539250 -0.686338 -3.314287Oregon -0.173919  0.566496 -0.869736np.abs(frame)Out[6]:                b         d         eUtah    1.021003  0.813102  0.111531Ohio    0.450382  0.532916  0.103158Texas   0.539250  0.686338  3.314287Oregon  0.173919  0.566496  0.869736
另一个常见的操作是:将函数应用到由各列或者各行所形成的一维数组上。DataFrame的apply方法即可实现此功能:

f=lambda x:x.max()-x.min()frame.apply(f)Out[8]: b    1.560253d    1.379598e    3.417445dtype: float64
frame.apply(f,axis=1)Out[9]: Utah      1.834105Ohio      0.636073Texas     2.775037Oregon    1.436232dtype: float64
许多最为常见的数组统计功能都被实现为DataFrame的方法(如sum和mean),因此无需使用apply方法。

除标量值外,传递给apply的函数还可以返回由多个值组成的Series:

def f(x):    return Series([x.min(),x.max()],index=['min','max'])frame.apply(f)Out[14]:             b         d         emin -0.539250 -0.813102 -3.314287max  1.021003  0.566496  0.103158
此外,元素级的Python函数也是可以用的,加入你想得到frame中各个浮点值的格式化字符串,使用applymap即可:

format=lambda x: '%.2f' % x
frame.applymap(format)Out[17]:             b      d      eUtah     1.02  -0.81  -0.11Ohio    -0.45  -0.53   0.10Texas   -0.54  -0.69  -3.31Oregon  -0.17   0.57  -0.87
之所以叫做applymap,是因为Series有一个应用于元素级函数的map方法:

frame['e'].map(format)Out[18]: Utah      -0.11Ohio       0.10Texas     -3.31Oregon    -0.87Name: e, dtype: object
2.排序和排名:

sort_index方法·用于对列名或者行名进行排序:有两个参数,一个是axis,另一个是ascending。默认等于true表示升序排列,等于false表示降序。

frame=DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c'])frameOut[20]:        d  a  b  cthree  0  1  2  3one    4  5  6  7frame.sort_index()Out[21]:        d  a  b  cone    4  5  6  7three  0  1  2  3frame.sort_index(axis=1)Out[22]:        a  b  c  dthree  1  2  3  0one    5  6  7  4

若要按值对Series进行排序,可以用其sort_values()方法:

obj=Series([4,7,-3,2])
obj.sort_values()Out[25]: 2   -33    20    41    7dtype: int64
在DataFrame中,可以根据一个或者多个列中的值进行排序,将一个或者多个列的名字传递给by选项即可达到该目的:

frame=DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]})
frame.sort_values(by='b')Out[30]:    a  b2  0 -33  1  20  0  41  1  7
三:带有重复值的索引:

便签唯一不是强制性的:索引的is_unique属性可以告诉你它的值是否是唯一的:

obj=Series(range(5),index=['a','a','b','b','c'])obj.index.is_uniqueOut[33]: False















0 0