1 | import numpy as np |
主要内容
- 填充值处理 fill_value
- 翻转功能r
- 广播机制
- apply和applymap
- 排名和排序
- 重复标签
- 汇总和统计
填充值处理
- 使用add方法,填入
fill_value
参数,添加指定元素 - 翻转参数,用r实现
- add/radd
- sub/rsub
- div/rdiv
- floor/rfloor
- mul/rmul
- pow/rpow
1 | df1 = pd.DataFrame(np.arange(12.).reshape((3,4)), |
1 | df2 = pd.DataFrame(np.arange(20.).reshape((4,5)), |
1 | df1 |
a | b | c | d | |
---|---|---|---|---|
0 | 0.0 | 1.0 | 2.0 | 3.0 |
1 | 4.0 | 5.0 | 6.0 | 7.0 |
2 | 8.0 | 9.0 | 10.0 | 11.0 |
1 | df2 |
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0.0 | 1.0 | 2.0 | 3.0 | 4.0 |
1 | 5.0 | 6.0 | 7.0 | 8.0 | 9.0 |
2 | 10.0 | 11.0 | 12.0 | 13.0 | 14.0 |
3 | 15.0 | 16.0 | 17.0 | 18.0 | 19.0 |
1 | df1+df2 |
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0.0 | 2.0 | 4.0 | 6.0 | NaN |
1 | 9.0 | 11.0 | 13.0 | 15.0 | NaN |
2 | 18.0 | 20.0 | 22.0 | 24.0 | NaN |
3 | NaN | NaN | NaN | NaN | NaN |
1 | # 使用add方法,填入fill_value参数 |
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0.0 | 2.0 | 4.0 | 6.0 | 4.0 |
1 | 9.0 | 11.0 | 13.0 | 15.0 | 9.0 |
2 | 18.0 | 20.0 | 22.0 | 24.0 | 14.0 |
3 | 15.0 | 16.0 | 17.0 | 18.0 | 19.0 |
1 | # r翻转实现 |
a | b | c | d | |
---|---|---|---|---|
0 | inf | 1.000000 | 0.500000 | 0.333333 |
1 | 0.250 | 0.200000 | 0.166667 | 0.142857 |
2 | 0.125 | 0.111111 | 0.100000 | 0.090909 |
1 | df1.rdiv(1) |
a | b | c | d | |
---|---|---|---|---|
0 | inf | 1.000000 | 0.500000 | 0.333333 |
1 | 0.250 | 0.200000 | 0.166667 | 0.142857 |
2 | 0.125 | 0.111111 | 0.100000 | 0.090909 |
1 | df1.reindex(columns=df2.columns, fill_value=0) |
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0.0 | 1.0 | 2.0 | 3.0 | 0 |
1 | 4.0 | 5.0 | 6.0 | 7.0 | 0 |
2 | 8.0 | 9.0 | 10.0 | 11.0 | 0 |
广播机制
Series和DataFrame之间进行运算的时候,会作用于每行。
- 二维数组和一维向量之间
- DF数据和S型数据之间
1 | arr = np.arange(12.).reshape((3, 4)) |
1 | array([[ 0., 1., 2., 3.], |
1 | arr[0] |
1 | array([0., 1., 2., 3.]) |
1 | # 每行都要执行减操作 |
1 | array([[0., 0., 0., 0.], |
1 | # DF和S型数据 |
b | d | e | |
---|---|---|---|
Utah | 0.0 | 1.0 | 2.0 |
Ohio | 3.0 | 4.0 | 5.0 |
Texas | 6.0 | 7.0 | 8.0 |
Oregon | 9.0 | 10.0 | 11.0 |
1 | series = frame.iloc[0] |
1 | b 0.0 |
1 | frame - series |
b | d | e | |
---|---|---|---|
Utah | 0.0 | 0.0 | 0.0 |
Ohio | 3.0 | 3.0 | 3.0 |
Texas | 6.0 | 6.0 | 6.0 |
Oregon | 9.0 | 9.0 | 9.0 |
1 | series2 = pd.Series(range(3), index=['b', 'e', 'f']) |
1 | b 0 |
1 | # 相同的数据则直接相加,只在一个类型中存在,填充为NaN |
b | d | e | f | |
---|---|---|---|---|
Utah | 0.0 | NaN | 3.0 | NaN |
Ohio | 3.0 | NaN | 6.0 | NaN |
Texas | 6.0 | NaN | 9.0 | NaN |
Oregon | 9.0 | NaN | 12.0 | NaN |
1 | # 在列上进行广播机制 |
1 | Utah 1.0 |
1 | # axis="index"等价于axis=0 |
b | d | e | |
---|---|---|---|
Utah | -1.0 | 0.0 | 1.0 |
Ohio | -1.0 | 0.0 | 1.0 |
Texas | -1.0 | 0.0 | 1.0 |
Oregon | -1.0 | 0.0 | 1.0 |
ufuncs
- Numpy的元素级数组方法用在pandas操作中:abs\sum\cos\sin…
- apply()方法作用于DF型数据
- applymap()方法作用于S型数据
1 | frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'), |
b | d | e | |
---|---|---|---|
Utah | 0.644845 | 0.878886 | 0.505433 |
Ohio | -0.230029 | -0.268866 | -0.107758 |
Texas | 0.429735 | 0.016485 | -0.940844 |
Oregon | 0.318921 | -0.910421 | 0.945280 |
1 | # ufuncs函数 |
b | d | e | |
---|---|---|---|
Utah | 0.644845 | 0.878886 | 0.505433 |
Ohio | 0.230029 | 0.268866 | 0.107758 |
Texas | 0.429735 | 0.016485 | 0.940844 |
Oregon | 0.318921 | 0.910421 | 0.945280 |
1 | np.exp(frame) |
b | d | e | |
---|---|---|---|
Utah | 1.905692 | 2.408215 | 1.657703 |
Ohio | 0.794511 | 0.764246 | 0.897845 |
Texas | 1.536850 | 1.016622 | 0.390298 |
Oregon | 1.375642 | 0.402355 | 2.573535 |
1 | # apply():将自己实现的函数直接传给apply方法,作用于每行,返回S型数据 |
1 | b 0.874874 |
1 | def f(x): |
b | d | e | |
---|---|---|---|
min | -0.230029 | -0.910421 | -0.940844 |
max | 0.644845 | 0.878886 | 0.945280 |
1 | # applymap()方法:S的方法 |
b | d | e | |
---|---|---|---|
Utah | 0.64 | 0.88 | 0.51 |
Ohio | -0.23 | -0.27 | -0.11 |
Texas | 0.43 | 0.02 | -0.94 |
Oregon | 0.32 | -0.91 | 0.95 |
1 | # S数据的map方法 |
1 | Utah 0.51 |
排序和排名
- sorting
- sort_index():按照索引进行排序
- axis指定行和列
- ascending指定升序和降序
- sort_values():
- 按照值对S型数据进行排序:缺失值放到末尾
- 对DF数据进行排序,通过by指定某个列属性
- 多个列进行排序,传入名称的列表
1 | obj = pd.Series(range(4), index=['d', 'a', 'b', 'c']) |
1 | a 1 |
1 | # DF数据的排序 |
d | a | b | c | |
---|---|---|---|---|
one | 4 | 5 | 6 | 7 |
three | 0 | 1 | 2 | 3 |
1 | # 指定列排序和降序(dcba) |
d | c | b | a | |
---|---|---|---|---|
three | 0 | 3 | 2 | 1 |
one | 4 | 7 | 6 | 5 |
1 | # sort_values() |
b | a | |
---|---|---|
2 | -3 | 0 |
3 | 2 | 1 |
0 | 4 | 0 |
1 | 7 | 1 |
1 | frame.sort_values(by=['a', 'b']) # 同时指定多个列属性 |
b | a | |
---|---|---|
2 | -3 | 0 |
0 | 4 | 0 |
3 | 2 | 1 |
1 | 7 | 1 |
rank
- 排名从1开始
- 返回的是平均排名,打破平级关系,method参数
- average:默认平均值
- min:使用分组中的最小值
- max:使用最大值
- first:出现顺序
- dense:
- obj.rank(ascending=False, method=‘min/max’)指定降序和取排名的大小值
1 | obj = pd.Series([7, -5, 7, 4, 2, 0, 4]) |
1 | 0 6.5 |
1 | # 根据出现的顺序返回排名 |
1 | 0 6.0 |
1 | # 降序排列:[7,7,4,4,2,0,-5],相同元素排名加1 |
1 | 0 1.0 |
1 | obj.rank(ascending=False, method='max') # 第一个7排名为1,取max值2 |
1 | 0 2.0 |
1 | obj.rank(ascending=False, method='first') |
1 | 0 1.0 |
1 | # 类似min方法,但是不加1,重复元素排名相同 |
1 | 0 1.0 |
重复标签的索引
- 直接查看索引index的is_unique()属性
- 索引重复的标签返回多个值
汇总和统计
- sum():返回含有列的和的S型数据
- 传⼊axis='columns’或axis=1将会按⾏进⾏求和
- axis=0:表示行;axis=1:表示列
- skipna:排除缺失值,默认值是True
- idxmax()/idxmin():返回最大值或者最小值的索引
- describe:返回多个统计值
1 | df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5], |
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 7.10 | -4.5 |
c | NaN | NaN |
d | 0.75 | -1.3 |
1 | df.sum(axis='columns') |
1 | a 1.40 |
1 | # 含有一个NA值自动排除 |
1 | a NaN |
1 | df.mean(axis='columns') |
1 | a 1.400 |
1 | df.idxmax() |
1 | one b |
1 | df |
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 7.10 | -4.5 |
c | NaN | NaN |
d | 0.75 | -1.3 |
1 | df.idxmin() |
1 | one d |
1 | df.cumsum() # 累积求和 |
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 8.50 | -4.5 |
c | NaN | NaN |
d | 9.25 | -5.8 |
1 | df.describe() |
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 |