目录
0. 回顾
之前我们学习了dataframe,这一节我们学习索引对象的一些操作。
1. 索引对象的其他功能
1.1 更换索引
index索引对象定义之后就不能改变了,但是可以执行更换索引操作来解决这个问题。
示例1:
import pandas as pd
ser = pd.Series([2, 5, 6], index=['one', 'two', 'three'])
print(ser)
ser1 = ser.reindex(['three', 'two', 'one'])
print(ser1)
运行结果为:
one 2
two 5
three 6
dtype: int64
three 6
two 5
one 2
dtype: int64
可以看到,此时是改变索引之后再赋值给另一个才行,原来的series是不会改变的,并且索引是之前出现的。
示例2:对缺失的索引值进行填充。
import pandas as pd
ser = pd.Series([2, 5, 6], index=[0, 3, 5])
print(ser)
ser1 = ser.reindex(range(6), method='ffill')
print(ser1)
运行结果为:
0 2
3 5
5 6
dtype: int64
0 2
1 2
2 2
3 5
4 5
5 6
dtype: int64
可以看到,此时利用ffill方法进行填充,其range值是从索引的0位开始的,到最后的地方结束。此时,我们插入的值是参考前面的值,还可以利用bfill参考后面的值。
1.2 删除
利用drop()函数进行删除。
示例3:
import pandas as pd
ser = pd.Series([2, 5, 6],)
print(ser)
ser1 = ser.drop([0, 2])
print(ser1)
运行结果为:
0 2
1 5
2 6
dtype: int64
1 5
dtype: int64
示例4:
import pandas as pd
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=['yi', 'er', 'san'])
print(df)
df1 = df.drop([0])
print(df1)
df2 = df.drop(['er'], axis=1)
print(df2)
运行结果为:
yi er san
0 3 5 7
1 2 4 6
yi er san
1 2 4 6
yi san
0 3 7
1 2 6
需要注意的是,对列进行操作时,需要指定axis轴。
1.3 算术和数据对齐
当进行操作时,两个对象都有的索引进行运算,不同的则进行保留并赋值为NaN。
示例5:
import pandas as pd
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=['yi', 'er', 'san'])
print(df)
df1 = df.reindex(range(1, 3), method="ffill")
print(df1)
print(df + df1)
运行结果为:
yi er san
0 3 5 7
1 2 4 6
yi er san
1 2 4 6
2 2 4 6
yi er san
0 NaN NaN NaN
1 4.0 8.0 12.0
2 NaN NaN NaN
2. 数据结构之间的运算
2.1 灵活的运算符号方法
可以使用各种算术方法进行运算。
示例6:
import pandas as pd
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=['yi', 'er', 'san'])
print(df)
df1 = df.reindex(range(1, 3), method="ffill")
print(df1)
print(df.add(df1))
print(df.mul(df1))
运行结果为:
yi er san
0 3 5 7
1 2 4 6
yi er san
1 2 4 6
2 2 4 6
yi er san
0 NaN NaN NaN
1 4.0 8.0 12.0
2 NaN NaN NaN
yi er san
0 NaN NaN NaN
1 4.0 16.0 36.0
2 NaN NaN NaN
2.2 dataframe和series对象之间的运算
示例7:
import pandas as pd
import numpy as np
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=[0, 1, 2])
print(df)
ser = pd.Series([2, 4, 6])
print(ser)
print(df+ser)
运行结果为:
0 1 2
0 3 5 7
1 2 4 6
0 2
1 4
2 6
dtype: int64
0 1 2
0 5 9 13
1 4 8 12
可以看到,series的index进行运算时,变成了columns。
3. 函数应用和映射
3.1 操作元素的函数
示例8:
import pandas as pd
import numpy as np
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=[0, 1, 2])
print(df)
print(np.sqrt(df))
运行结果为:
0 1 2
0 3 5 7
1 2 4 6
0 1 2
0 1.732051 2.236068 2.645751
1 1.414214 2.000000 2.449490
3.2 按行或列执行的操作
示例9:
import pandas as pd
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=[0, 1, 2])
print(df)
f = lambda x: x.max() - x.min()
print(df.apply(f))
print(df.apply(f, axis=1))
运行结果为:
0 1 2
0 3 5 7
1 2 4 6
0 1
1 1
2 1
dtype: int64
0 4
1 4
dtype: int64
可以看到此时,默认为进行列操作,要进行行操作则将axis设置为1。
示例10:
import pandas as pd
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=[0, 1, 2])
print(df)
def f(x):
return pd.Series([x.max(), x.min()], index=['max', 'min'])
print(df.apply(f))
运行结果为:
0 1 2
0 3 5 7
1 2 4 6
0 1 2
max 3 5 7
min 2 4 6
同样,也是默认为列,也可以使用axis为1进行行操作。
3.3 统计函数
示例11:利用相关的函数进行计算。
import pandas as pd
df = pd.DataFrame([[3, 5, 7], [2, 4, 6]],
columns=[0, 1, 2])
print(df)
print(df.sum())
print(df.mean())
print(df.describe())
运行结果为:
0 1 2
0 3 5 7
1 2 4 6
0 5
1 9
2 13
dtype: int64
0 2.5
1 4.5
2 6.5
dtype: float64
0 1 2
count 2.000000 2.000000 2.000000
mean 2.500000 4.500000 6.500000
std 0.707107 0.707107 0.707107
min 2.000000 4.000000 6.000000
25% 2.250000 4.250000 6.250000
50% 2.500000 4.500000 6.500000
75% 2.750000 4.750000 6.750000
max 3.000000 5.000000 7.000000