《Python数据分析实战》
1.函数应用和映射
按列或列执行操作的函数:
除了通用函数,用户还可以自己定义函数。
需要注意的是这些函数对一维数组进行计算,返回结果为一个数值。
#函数定义
f = lambda x:x.max()-x.min()
#或者
def f(x):
return x.max()-x.min()
#用apply()函数可以在DataFrame对象上调用刚定义的函数
frame.apply(f)
>>
ball 12
pen 12
pencil 12
paper 12
dtype: int64
如果你想用函数处理行而不是列,需要axis选项设置为1。
frame.apply(f,axis=1)
>>
red 3
blue 3
yellow 3
white 3
dtype: int64
apply()函数并不是一定要返回一个标量,它还可以返回Series对象,因而可以借助它同时执行多个函数。
每调用一次函数,就会有两个或两个以上的返回结果。
def f(x):
return pd.Series([x.min(),x.max()],index=['min','max'])
像之前一样,应用这个函数,但是返回结果不再是Series而是DataFrame对象,并且DataFrame对象的行数跟函数返回值的数量相等。
frame.apply(f)
>>
ball pen pencil paper
min 0 1 2 3
max 12 13 14 15
统计函数:
数组的大多数统计函数根本不用apply,直接调用方法就可以了。例如,sum()和mean()函数分别用来计算DataFrame对象元素之和及它们的均值。
frame.sum()
>>
ball 24
pen 28
pencil 32
paper 36
dtype: int64
frame.mean()
>>
ball 6
pen 7
pencil 8
paper 9
dtype: float64
describe()函数能够计算多个统计量。(超实用功能)
#count是指行数
frame.describe()
>>
ball pen pencil paper
count 4.000000 4.000000 4.000000 4.000000
mean 6.000000 7.000000 8.000000 9.000000
std 5.163978 5.163978 5.163978 5.163978
min 0.000000 1.000000 2.000000 3.000000
25% 3.000000 4.000000 5.000000 6.000000
50% 6.000000 7.000000 8.000000 9.000000
75% 9.000000 10.000000 11.000000 12.000000
max 12.000000 13.000000 14.000000 15.000000
2.排序和排位次
另外一种使用索引机制的基础操作时排序(sorting)。对数据进行排序通常为必要操作,因此简化它的实现非常重要。
pandas的sort_index()函数返回一个跟原对象元素相同但顺序不同的新对象。
Series对象要排序的索引只有一列,因此操作很简单。
#Ser对象按索引排序
ser = pd.Series([5,0,3,8,4],index=['red','blue','yellow','white','green'])
ser
>>
red 5
blue 0
yellow 3
white 8
green 4
dtype: int64
ser.sort_index()
blue 0
green 4
red 5
whtie 8
yellow 3
输出结果中,各元素按照以字母表顺序升序排序(A-Z)的标签进行排序。这是默认的排序方法,但若指定ascending选项,将其值置为False,则可按照降序排列。
ser.sort_index(ascending=False)
>>
yellow 3
white 8
red 5
green