import pandas as pd
import numpy as np
# 假设有 5 个人,分别参加了 4 门课程,获得了对应的分数
# 同时这个 5 个人分别负责的项目个数 在 'Project_num' 列中显示
data = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ella', 'Ford', 'Gary', 'Ham', 'Ico', 'Jack']),
'Math_A' : pd.Series([1.1, 2.2, 3.3, 4.4, 5, 3.2, 2.4, 1.5, 4.3]),
'English_A' : pd.Series([3, 2.6, 2, 1.7, 3, 3.3, 4.4, 5, 3.2, 2.4]),
'Math_B' : pd.Series([1.7, 2.5, 3.6, 2.4, 5, 2.2, 3.3, 4.4, 1.5, 4.3]),
'English_B' : pd.Series([5, 2.6, 2.4, 1.3, 3, 3.6, 2.4, 5, 2.2]),
'Project_num' : pd.Series([2, 3, 0, 1, 7, 2, 1, 5, 3, 4]),
'Sex' : pd.Series(['F', 'M', 'M', 'F', 'M', 'F', 'M', 'M', 'F', 'M'])
}
df = pd.DataFrame(data)
print(df)
运行结果:
name Math_A English_A Math_B English_B Project_num Sex
0 Alice 1.1 3.0 1.7 5.0 2 F
1 Bob 2.2 2.6 2.5 2.6 3 M
2 Cathy 3.3 2.0 3.6 2.4 0 M
3 Dany 4.4 1.7 2.4 1.3 1 F
4 Ella 5.0 3.0 5.0 3.0 7 M
5 Ford 3.2 3.3 2.2 3.6 2 F
6 Gary 2.4 4.4 3.3 2.4 1 M
7 Ham 1.5 5.0 4.4 5.0 5 M
8 Ico 4.3 3.2 1.5 2.2 3 F
9 Jack NaN 2.4 4.3 NaN 4 M
print(df.dropna())
# 由于 Jack 的数据有 缺失,所以删除这一行
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex
0 Alice 1.1 3.0 1.7 5.0 2 F
1 Bob 2.2 2.6 2.5 2.6 3 M
2 Cathy 3.3 2.0 3.6 2.4 0 M
3 Dany 4.4 1.7 2.4 1.3 1 F
4 Ella 5.0 3.0 5.0 3.0 7 M
5 Ford 3.2 3.3 2.2 3.6 2 F
6 Gary 2.4 4.4 3.3 2.4 1 M
7 Ham 1.5 5.0 4.4 5.0 5 M
8 Ico 4.3 3.2 1.5 2.2 3 F
print(df.fillna(0))
# 将 Jack 的空缺数据,用 0 补上
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex
0 Alice 1.1 3.0 1.7 5.0 2 F
1 Bob 2.2 2.6 2.5 2.6 3 M
2 Cathy 3.3 2.0 3.6 2.4 0 M
3 Dany 4.4 1.7 2.4 1.3 1 F
4 Ella 5.0 3.0 5.0 3.0 7 M
5 Ford 3.2 3.3 2.2 3.6 2 F
6 Gary 2.4 4.4 3.3 2.4 1 M
7 Ham 1.5 5.0 4.4 5.0 5 M
8 Ico 4.3 3.2 1.5 2.2 3 F
9 Jack 0.0 2.4 4.3 0.0 4 M
df_2 = df.assign(Chinese_A=np.random.randint(1,5,size=10))
print(df_2)
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex Chinese_A
0 Alice 1.1 3.0 1.7 5.0 2 F 2
1 Bob 2.2 2.6 2.5 2.6 3 M 2
2 Cathy 3.3 2.0 3.6 2.4 0 M 2
3 Dany 4.4 1.7 2.4 1.3 1 F 4
4 Ella 5.0 3.0 5.0 3.0 7 M 2
5 Ford 3.2 3.3 2.2 3.6 2 F 4
6 Gary 2.4 4.4 3.3 2.4 1 M 2
7 Ham 1.5 5.0 4.4 5.0 5 M 2
8 Ico 4.3 3.2 1.5 2.2 3 F 2
9 Jack NaN 2.4 4.3 NaN 4 M 1
df_2 = df.assign(Chinese_A=df.English_A)
print(df_2)
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex Chinese_A
0 Alice 1.1 3.0 1.7 5.0 2 F 3.0
1 Bob 2.2 2.6 2.5 2.6 3 M 2.6
2 Cathy 3.3 2.0 3.6 2.4 0 M 2.0
3 Dany 4.4 1.7 2.4 1.3 1 F 1.7
4 Ella 5.0 3.0 5.0 3.0 7 M 3.0
5 Ford 3.2 3.3 2.2 3.6 2 F 3.3
6 Gary 2.4 4.4 3.3 2.4 1 M 4.4
7 Ham 1.5 5.0 4.4 5.0 5 M 5.0
8 Ico 4.3 3.2 1.5 2.2 3 F 3.2
9 Jack NaN 2.4 4.3 NaN 4 M 2.4
df_2 = df.assign(Math_Total=lambda x:x['Math_A']+x['Math_B'])
# 计算 Math_A 和 Math_B 的加总分数
print(df_2)
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex Math_Total
0 Alice 1.1 3.0 1.7 5.0 2 F 2.8
1 Bob 2.2 2.6 2.5 2.6 3 M 4.7
2 Cathy 3.3 2.0 3.6 2.4 0 M 6.9
3 Dany 4.4 1.7 2.4 1.3 1 F 6.8
4 Ella 5.0 3.0 5.0 3.0 7 M 10.0
5 Ford 3.2 3.3 2.2 3.6 2 F 5.4
6 Gary 2.4 4.4 3.3 2.4 1 M 5.7
7 Ham 1.5 5.0 4.4 5.0 5 M 5.9
8 Ico 4.3 3.2 1.5 2.2 3 F 5.8
9 Jack NaN 2.4 4.3 NaN 4 M NaN
df_3 = df.assign(English_Total=lambda df:df['English_A']+df['English_B'])
# 计算 English_A 和 English_B 的加总分数
print(df_3)
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex English_Total
0 Alice 1.1 3.0 1.7 5.0 2 F 8.0
1 Bob 2.2 2.6 2.5 2.6 3 M 5.2
2 Cathy 3.3 2.0 3.6 2.4 0 M 4.4
3 Dany 4.4 1.7 2.4 1.3 1 F 3.0
4 Ella 5.0 3.0 5.0 3.0 7 M 6.0
5 Ford 3.2 3.3 2.2 3.6 2 F 6.9
6 Gary 2.4 4.4 3.3 2.4 1 M 6.8
7 Ham 1.5 5.0 4.4 5.0 5 M 10.0
8 Ico 4.3 3.2 1.5 2.2 3 F 5.4
9 Jack NaN 2.4 4.3 NaN 4 M NaN
df_4 = df.assign(Total = df_2.Math_Total + df_3.English_Total)
# 将计算总分 Total
print(df_4)
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex Total
0 Alice 1.1 3.0 1.7 5.0 2 F 10.8
1 Bob 2.2 2.6 2.5 2.6 3 M 9.9
2 Cathy 3.3 2.0 3.6 2.4 0 M 11.3
3 Dany 4.4 1.7 2.4 1.3 1 F 9.8
4 Ella 5.0 3.0 5.0 3.0 7 M 16.0
5 Ford 3.2 3.3 2.2 3.6 2 F 12.3
6 Gary 2.4 4.4 3.3 2.4 1 M 12.5
7 Ham 1.5 5.0 4.4 5.0 5 M 15.9
8 Ico 4.3 3.2 1.5 2.2 3 F 11.2
9 Jack NaN 2.4 4.3 NaN 4 M NaN
df_5 = df_4.assign(Total = lambda df : df.Total*2)
# 将总分翻倍
print(df_5)
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex Total
0 Alice 1.1 3.0 1.7 5.0 2 F 21.6
1 Bob 2.2 2.6 2.5 2.6 3 M 19.8
2 Cathy 3.3 2.0 3.6 2.4 0 M 22.6
3 Dany 4.4 1.7 2.4 1.3 1 F 19.6
4 Ella 5.0 3.0 5.0 3.0 7 M 32.0
5 Ford 3.2 3.3 2.2 3.6 2 F 24.6
6 Gary 2.4 4.4 3.3 2.4 1 M 25.0
7 Ham 1.5 5.0 4.4 5.0 5 M 31.8
8 Ico 4.3 3.2 1.5 2.2 3 F 22.4
9 Jack NaN 2.4 4.3 NaN 4 M NaN
print(pd.qcut(df.Math_A,[0,0.5,1],labels=['低分','高分']))
# 分 2 层,各一半
print('\n')
运行结果:
0 低分
1 低分
2 高分
3 高分
4 高分
5 低分
6 低分
7 低分
8 高分
9 NaN
Name: Math_A, dtype: category
Categories (2, object): [低分 < 高分]
print(pd.qcut(df.Math_A,[0,0.2,0.8,1],labels=['低分','中等','高分']))
# 分 3 层,第一层占 20%,第二次 60%,第三层 20%
print('\n')
运行结果:
0 低分
1 中等
2 中等
3 高分
4 高分
5 中等
6 中等
7 低分
8 中等
9 NaN
Name: Math_A, dtype: category
Categories (3, object): [低分 < 中等 < 高分]
print(pd.qcut(df.Math_A,3,labels=['低分','中等','高分']))
# 默认方式分 3 层
print('\n')
运行结果:
0 低分
1 低分
2 中等
3 高分
4 高分
5 中等
6 中等
7 低分
8 高分
9 NaN
Name: Math_A, dtype: category
Categories (3, object): [低分 < 中等 < 高分]
print(df.max())
# 纵向取最大值
print('\n')
运行结果:
name Jack
Math_A 5
English_A 5
Math_B 5
English_B 5
Project_num 7
Sex M
dtype: object
print(df.max(axis=1))
# 横取最大值
print('\n')
运行结果:
0 5.0
1 3.0
2 3.6
3 4.4
4 7.0
5 3.6
6 4.4
7 5.0
8 4.3
9 4.3
dtype: float64
print(df.Math_A.clip(lower = 1, upper = 2))
# 将 Math_A 设定在 1~2 之间
print('\n')
运行结果:
0 1.1
1 2.0
2 2.0
3 2.0
4 2.0
5 2.0
6 2.0
7 1.5
8 2.0
9 NaN
Name: Math_A, dtype: float64
df_6 = df.assign(Test=df.Math_A-2)
print(df_6)
print('\n')
print(df_6.Test.abs())
print('\n')
运行结果:
name Math_A English_A Math_B English_B Project_num Sex Test
0 Alice 1.1 3.0 1.7 5.0 2 F -0.9
1 Bob 2.2 2.6 2.5 2.6 3 M 0.2
2 Cathy 3.3 2.0 3.6 2.4 0 M 1.3
3 Dany 4.4 1.7 2.4 1.3 1 F 2.4
4 Ella 5.0 3.0 5.0 3.0 7 M 3.0
5 Ford 3.2 3.3 2.2 3.6 2 F 1.2
6 Gary 2.4 4.4 3.3 2.4 1 M 0.4
7 Ham 1.5 5.0 4.4 5.0 5 M -0.5
8 Ico 4.3 3.2 1.5 2.2 3 F 2.3
9 Jack NaN 2.4 4.3 NaN 4 M NaN
0 0.9
1 0.2
2 1.3
3 2.4
4 3.0
5 1.2
6 0.4
7 0.5
8 2.3
9 NaN
Name: Test, dtype: float64