3.1重新索引
pandas对象的⼀个重要⽅法是reindex,其作⽤是创建⼀个新对象,它的数据符合新的索引,如下:
In [91]: obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
In [92]: obj
Out[92]:
d 4.5
b 7.2
a -5.3
c 3.6
dtype: float64
⽤该
Series
的
reindex
将会根据新索引进⾏重排。如果某个索引值
当前不存在,就引⼊缺失值:
In [93]: obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
In [94]: obj2
Out[94]:
a -5.3
b 7.2
c 3.6
d 4.5
e NaN
dtype: float64
对于时间序列这样的有序数据,重新索引时可能需要做⼀些插值处理。
method
选项即可达到此⽬的。下面列出reindex函数的各参数及说明:
参数 | 说明 |
index | 用作索引的新序列。既可以是Index实例,也可以是其他序列型的Python数据结构。Index会被完全使用,就像没有任何复制一样 |
fill_value | 在重新索引的过程中,需要引入缺失值时使用的替代值 |
limit | 前向或后向填充时的最大填充量 |
method | 插值(填充)方式,具体参数请参见表5-4 |
tolerance | 向前后向后填充时,填充不准确匹配项的最大间距(绝对值距离) |
level | 在Multilndex的指定级别上匹配简单索引,否则选取其子集 |
copy | 默认为True,无论如何都复制;如果为False,则新旧相等就不复制 |
3.2删除指定轴的项
丢弃某条轴上的⼀个或多个项很简单,只要有⼀个索引数组或列 表即可。由于需要执⾏⼀些数据整理和集合逻辑,所以drop⽅法 返回的是⼀个在指定轴上删除了指定值的新对象:
In [105]: obj = pd.Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])
In [106]: obj
Out[106]:
a 0.0
b 1.0
c 2.0
d 3.0
e 4.0
dtype: float64
In [107]: new_obj = obj.drop('c')
In [108]: new_obj
Out[108]:
a 0.0
b 1.0
d 3.0
e 4.0
dtype: float64
对于
DataFrame
,可以删除任意轴上的索引值。
在drop时⼩⼼使⽤
inplace
,它会销毁所有被删除的数据。
3.3算术⽅法
下表列出Series和DataFrame的算数方法
。它们每个都有⼀
个副本,以字⺟
r
开头,它会翻转参数。
方法 | 说明 |
add,radd | 用于加法(+)的方法 |
sub,rsub | 用于减法(-)的方法 |
div, rdiv | 用于除法(/)的方法 |
floordiv, rfloordiv | 用于底除(I)的方法 |
mul,rmul | 用于乘法(*)的方法 |
pow,rpow | 用于指数(**)的方法 |
3.4 汇总和计算描述统计
pandas对象拥有⼀组常⽤的数学和统计⽅法。它们⼤部分都属于约简和汇总统计,⽤于从Series中提取单个值(如
sum
或mean)或从
DataFrame
的⾏或列中提取⼀个
Series
。
In [230]: df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5],[np.nan, np.nan],
[0.75, -1.3]], index=['a', 'b', 'c', 'd'],columns=['one', 'two'])
In [231]: df
Out[231]:
one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
#调⽤DataFrame的sum⽅法将会返回⼀个含有列的和的Series:
In [232]: df.sum()
Out[232]:
one 9.25
two -5.80
dtype: float64
#传⼊axis='columns'或axis=1将会按⾏进⾏求和运算:
In [233]: df.sum(axis=1)
Out[233]:
a 1.40
b 2.60
c NaN
d -0.55
有些⽅法(如
idxmin
和
idxmax)返回的是间接统计(⽐如达到最小值或最⼤值的索引),另⼀些⽅法则是累计型的。
#间接
In [235]: df.idxmax()
Out[235]:
one b
two d
dtype: object
#累计
In [236]: df.cumsum()
Out[236]:
one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8
还有⼀种⽅法,它既不是约简型也不是累计型。
describe
就是⼀个例⼦,它⽤于⼀次性产⽣多个汇总统计。比如:
In [237]: df.describe()
Out[237]:
one two
count 3.000000 2.000000
mean 3.083333 -2.900000
std 3.493685 2.262742
min 0.750000 -4.500000
25% 1.075000 -3.700000
50% 1.400000 -2.900000
75% 4.250000 -2.100000
max 7.100000 -1.300000
所有与描述统计相关的⽅法如下:
方法 | 说明 |
count | 非NA值的数量 |
describe | 针对Series或各DataFrame列计算汇总统计 |
min、max | 计算最小值和最大值 |
argmin、argmax | 计算能够获取到最小值和最大值的索引位置(整数) |
idxmin、idxmax | 计算能够获取到最小值和最大值的索引值 |
quantile | 计算样本的分位数(o到1) |
sum | 值的总和 |
mean | 值的平均数 |
median | 值的算术中位数((50%分位数) |
mad | 根据平均值计算平均绝对离差 |
var | 样本值的方差 |
std | 样本值的标准差 |
skew | 样本值的偏度(三阶矩) |
kurt | 样本值的峰度(四阶矩) |
cumsum | 样本值的累计和 |
cummin、cummax | 样本值的累计最大值和累计最小值 |
cumprod | 样本值的累计积 |
diff | 计算一阶差分(对时间序列很有用) |
pct_change | 计算百分数变化 |
本章节学习完毕