在将对象相加时如果索引对不同, 则结果的索引就是索引对的并集
自动的数据对齐操作在不重叠的索引处引入了 NaN 值
1 | s1 = pd.Series([7.3, -2.5, 3.4, 1.5], index=['a', 'b', 'c', 'd']) |
1 | (a 7.3 |
1 | s1+s2 |
1 | a NaN |
对于 DataFrame , 对齐操作会同时发生在行和列上
1 | df1 = pd.DataFrame(np.arange(9.).reshape((3, 3)), columns=list('bcd'), |
1 | ( b c d |
1 | df1+df2 |
b | c | d | e | |
---|---|---|---|---|
Colorado | NaN | NaN | NaN | NaN |
Ohio | NaN | 4.0 | 6.0 | NaN |
Oregon | NaN | NaN | NaN | NaN |
Texas | NaN | 10.0 | 12.0 | NaN |
Utah | NaN | NaN | NaN | NaN |
算术运算中的缺失值 : fill_value : 当一个对象中某个位置在另一个对象中找不到时填充一个指定值
1 | df1.add(df2, fill_value=0) |
b | c | d | e | |
---|---|---|---|---|
Colorado | 6.0 | 7.0 | 8.0 | NaN |
Ohio | 0.0 | 4.0 | 6.0 | 5.0 |
Oregon | NaN | 9.0 | 10.0 | 11.0 |
Texas | 3.0 | 10.0 | 12.0 | 8.0 |
Utah | NaN | 0.0 | 1.0 | 2.0 |
类型 | 说明 |
---|---|
add, radd | 用于加法(+)运算 |
sub, rsub | 用于减法(-)运算 |
div, rdiv | 用于除法(/)运算 |
floordiv, rfloordiv | 用于整除(//)运算 |
mod, rmod | 用于取余(%)运算 |
divmod, rdivmod | 用于取整和取余(// 和 %)运算 |
mul, rmul | 用于乘法(*)运算 |
pow, rpow | 用于指数(**)运算 |
df1.div(df2) : df1/df2 ; df1.rdiv(df2) : df2/df1
1 | s1 = pd.Series(list(range(1,6)), index=list('abcde')) |
1 | (a 1 |
1 | s1.mod(s2), s1.rmod(s2) # s1/s2, s2/s1 |
1 | (a NaN |
广播
1 | frame = pd.DataFrame(np.arange(12.).reshape((4, 3)), |
1 | ( b d e |
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']) |
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 |
frame.sub(series, axis) : 匹配轴 axis 进行广播, 其他算数运算函数同理
1 | frame = pd.DataFrame(np.arange(12.).reshape((4, 3)), |
1 | ( b d e |
1 | frame.sub(series3, axis='index') |
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 |
1 | frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'), |
b | d | e | |
---|---|---|---|
Utah | 1.014427 | -0.171110 | -0.209578 |
Ohio | 0.384411 | 0.098477 | 0.425979 |
Texas | 0.618812 | -0.087757 | 0.498332 |
Oregon | 0.329589 | -1.004679 | 0.205972 |
1 | np.abs(frame) |
b | d | e | |
---|---|---|---|
Utah | 1.014427 | 0.171110 | 0.209578 |
Ohio | 0.384411 | 0.098477 | 0.425979 |
Texas | 0.618812 | 0.087757 | 0.498332 |
Oregon | 0.329589 | 1.004679 | 0.205972 |
默认对 index 进行操作
, axis='columns' 时对 columns 进行操作
1 | frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'), |
b | d | e | |
---|---|---|---|
Utah | -0.504649 | -0.773222 | 3.765686 |
Ohio | -1.138202 | 0.029167 | 0.841352 |
Texas | -0.649582 | 0.596585 | -0.854243 |
Oregon | -0.353114 | 1.173491 | -1.507888 |
1 | f = lambda x: x.max() - x.min() # func_name = lambda vars_in: vars_out |
1 | (b 0.785088 |
1 | def f(x): |
1 | b 0.785088 |
计算各列/各行的最大值和最小值
> 对各行/列操作的返回的结果可以是由多个值组成的 Series
1 | def f(x): |
b | d | e | |
---|---|---|---|
min | -1.138202 | -0.773222 | -1.507888 |
max | -0.353114 | 1.173491 | 3.765686 |
1 | frame |
b | d | e | |
---|---|---|---|
Utah | -0.504649 | -0.773222 | 3.765686 |
Ohio | -1.138202 | 0.029167 | 0.841352 |
Texas | -0.649582 | 0.596585 | -0.854243 |
Oregon | -0.353114 | 1.173491 | -1.507888 |
1 | fmap = lambda x: '%.2f' % (x*10) # 只保留两位小数 |
b | d | e | |
---|---|---|---|
Utah | -5.05 | -7.73 | 37.66 |
Ohio | -11.38 | 0.29 | 8.41 |
Texas | -6.50 | 5.97 | -8.54 |
Oregon | -3.53 | 11.73 | -15.08 |
ascending : 是否按升序排序
1 | obj = pd.Series(range(4), index=['d', 'a', 'b', 'c']) |
1 | a 1 |
1 | frame = pd.DataFrame(np.arange(8).reshape((2, 4)), |
d | a | b | c | |
---|---|---|---|---|
three | 0 | 1 | 2 | 3 |
one | 4 | 5 | 6 | 7 |
1 | frame.sort_index() |
d | a | b | c | |
---|---|---|---|---|
one | 4 | 5 | 6 | 7 |
three | 0 | 1 | 2 | 3 |
1 | frame.sort_index(axis=1) |
a | b | c | d | |
---|---|---|---|---|
three | 1 | 2 | 3 | 0 |
one | 5 | 6 | 7 | 4 |
1 | frame.sort_index(axis=1, ascending=False) |
d | c | b | a | |
---|---|---|---|---|
three | 0 | 3 | 2 | 1 |
one | 4 | 7 | 6 | 5 |
1 | obj = pd.Series([4, 7, -3, 2]) |
1 | 2 -3 |
1 | obj = pd.Series([4, np.nan, 7, np.nan, -3, 2]) |
1 | 4 -3.0 |
1 | frame = pd.DataFrame({'b': [4, 7, 2, 2], 'a': [0, 1, 0, 1], 'c': [4, 3, 2, 1]}) |
b | a | c | |
---|---|---|---|
0 | 4 | 0 | 4 |
1 | 7 | 1 | 3 |
2 | 2 | 0 | 2 |
3 | 2 | 1 | 1 |
1 | frame.sort_values(by='b') |
b | a | c | |
---|---|---|---|
2 | 2 | 0 | 2 |
3 | 2 | 1 | 1 |
0 | 4 | 0 | 4 |
1 | 7 | 1 | 3 |
1 | frame.sort_values(by=['b', 'c']) |
b | a | c | |
---|---|---|---|
3 | 2 | 1 | 1 |
2 | 2 | 0 | 2 |
0 | 4 | 0 | 4 |
1 | 7 | 1 | 3 |
1 | obj = pd.Series([7, -5, 7, 4, 2, 0, 4]) |
1 | 0 6.5 |
1 | obj.rank(method='first') |
1 | 0 6.0 |
1 | obj.rank(ascending=False, method='min') # 并列第一、并列第三... |
1 | 0 1.0 |
1 | frame = pd.DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1], |
b | a | c | |
---|---|---|---|
0 | 4.3 | 0 | -2.0 |
1 | 7.0 | 1 | 5.0 |
2 | -3.0 | 0 | 8.0 |
3 | 2.0 | 1 | -2.5 |
1 | frame.rank(axis='columns') |
b | a | c | |
---|---|---|---|
0 | 3.0 | 2.0 | 1.0 |
1 | 3.0 | 1.0 | 2.0 |
2 | 1.0 | 2.0 | 3.0 |
3 | 3.0 | 2.0 | 1.0 |
类型 | 说明 |
---|---|
average | 给相等的分组分配平均排名(默认) |
min | 给相等的分组分配最小排名 |
max | 给相等的分组分配最大排名 |
first | 对相等的分组按出现顺序排名 |
dense | 类似于 min , 但是组间排名总是相差1 |