利用python进行数据分析-pandas入门3

本文详细介绍了如何使用Python的Pandas库进行数据分析,包括应用NumPy的ufuncs、DataFrame的apply方法、排序与排名、处理重复值、缺失数据的处理以及层次化索引等操作。通过实例展示了如何进行函数映射、排序、统计计算、填充缺失值以及重塑数据结构等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.函数应用和映射

NumPy的ufuncs(元素级数组方法)也可用于操作pandas对象

frame=DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Uath','Ohio','Texas','Oregon'])
print frame
print np.abs(frame)

结果为:

               b         d         e
Uath    1.187068  1.589404  0.328555
Ohio   -0.040634  1.489594 -0.453027
Texas   0.362667  0.601500  2.177313
Oregon  0.019020 -0.315751 -0.480646
               b         d         e
Uath    1.187068  1.589404  0.328555
Ohio    0.040634  1.489594  0.453027
Texas   0.362667  0.601500  2.177313
Oregon  0.019020  0.315751  0.480646

另一个常见的操作是,将函数应用到由各列或行所形成的一维数组上。DataFrame的apply方法即可实现此功能

f=lambda x:x.max()-x.min()
print frame.apply(f)
print frame.apply(f,axis=1)

结果为:

b    0.605155
d    2.173279
e    2.737098
dtype: float64
Uath      1.913344
Ohio      0.302252
Texas     1.663901
Oregon    1.654397
dtype: float64

许多最为常见的数组统计功能都能被实现成DataFrame的方法(比如sum和mean),因此无需使用apply方法

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

def f(x):
    return Series([x.min(),x.max()],index=['min','max'])
    
print frame.apply(f)

结果为:

            b         d         e
min -1.878553 -1.339043 -2.638153
max  1.051156  1.322494  0.242260

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

format=lambda x:'%.2f' % x
print frame.applymap(format)

结果为:

            b      d      e
Uath     0.27   0.94   0.73
Ohio    -0.81   0.78  -1.04
Texas    1.00   0.64   0.61
Oregon   0.55  -0.17  -0.40

之所以叫做applymap,是因为Series有一个用于应用元素级函数的map方法

print frame['e'].map(format)

结果为:

Uath      0.17
Ohio      2.22
Texas     0.58
Oregon    0.18
Name: e, dtype: object


2.排序和排名

要对行或列索引进行排序(按字典排序),可使用sort_index方法,它将返回一个已排序的新对象

obj=Series(range(4),index=['d','a','b','c'])
print obj.sort_index()

结果为:

a    1
b    2
c    3
d    0
dtype: int64

而对于DataFrame,可以根据任意一个轴上的索引进行排序

frame2=DataFrame(np.arange(8).reshape(2,4),index=['three','one'],columns=['d','a','b','c'])
print frame2.sort_index()
print frame2.sort_index(axis=1)

结果为:

       d  a  b  c
one    4  5  6  7
three  0  1  2  3
       a  b  c  d
three  1  2  3  0
one    5  6  7  4

数据默认是按照升序排序的,也可以降序排序

print frame2.sort_index(axis=1,ascending=False)

结果为:

       d  c  b  a
three  0  3  2  1
one    4  7  6  5

若要按值对Series进行排序,可使用其order方法

obj2=Series([4,7,-3,2])
print obj2.order()

结果为:

2   -3
3    2
0    4
1    7

在排序时,任何缺失值默认都会被放到Series末尾

obj3=Series([4,np.nan,7,np.nan,-3,2])
print obj3.order()

结果为:

4    -3
5     2
0     4
2     7
1   NaN
3   NaN
dtype: float64

在DataFrame上,你可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给by选项即可达到该目的

frame3=DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]})
print frame3
print frame3.sort_index(by='b')

结果为:

   a  b
0  0  4
1  1  7
2  0 -3
3  1  2
   a  b
2  0 -3
3  1  2
0  0  4
1  1  7

要根据多个列进行排序,传入名称的列表即可

print frame3.sort_index(by=['a','b'])

结果为:

   a  b
2  0 -3
0  0  4
3  1  2
1  1  7

排名(ranking)跟排序关系密切,且它会增设一个排名值(从1开始,一直到数组中有效数据的数量)。默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的

obj4=Series([7,-5,7,4,2,0,4])
print obj4.rank()

结果为:

0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5

也可以根据值在原数据中出现的顺序给出排名

print obj4.rank(method='first')

结果为:

0    6
1    1
2    7
3    4
4    3
5    2
6    5
dtype: float64

也可以按降序进行排名

print obj4.rank(method='max',ascending=False)

结果为:

0    2
1    7
2    2
3    4
4    5
5    6
6    4
dtype: float64


3.带有重复值的轴索引

索引的is_unique属性可以告诉你它的值是否是唯一的

obj5=Series(range(5),index=['a','a','b','b','c'])
print obj5
pr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值