代码拉取完成,页面将自动刷新
同步操作将从 yanhouzhen/pandas学习 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import numpy as np
import pandas as pd
df = pd.read_csv('data/table.csv')
df.head()
School | Class | ID | Gender | Address | Height | Weight | Math | Physics | |
---|---|---|---|---|---|---|---|---|---|
0 | S_1 | C_1 | 1101 | M | street_1 | 173 | 63 | 34.0 | A+ |
1 | S_1 | C_1 | 1102 | F | street_2 | 192 | 73 | 32.5 | B+ |
2 | S_1 | C_1 | 1103 | M | street_2 | 186 | 82 | 87.2 | B+ |
3 | S_1 | C_1 | 1104 | F | street_2 | 167 | 81 | 80.4 | B- |
4 | S_1 | C_1 | 1105 | F | street_4 | 159 | 64 | 84.8 | B+ |
append方法 主要是用于对行进行添加 1 行添加 必须要指定行name 2 表添加
df_append = df.loc[:3,['Gender','Height']].copy()
s = pd.Series({'Gender':'F','Height':188},name='new_row')
df_append.append(s)
Gender | Height | |
---|---|---|
0 | M | 173 |
1 | F | 192 |
2 | M | 186 |
3 | F | 167 |
new_row | F | 188 |
df_temp = pd.DataFrame({'Gender':['F','M'],'Height':[188,176]},index=['new_1','new_2'])
df_append.append(df_temp)
Gender | Height | |
---|---|---|
0 | M | 173 |
1 | F | 192 |
2 | M | 186 |
3 | F | 167 |
new_1 | F | 188 |
new_2 | M | 176 |
assign主要是用于添加列 列名直接由参数指定
s = pd.Series(list('abcd'),index=range(4))
df_append.assign(Letter=s)
Gender | Height | Letter | |
---|---|---|---|
0 | M | 173 | a |
1 | F | 192 | b |
2 | M | 186 | c |
3 | F | 167 | d |
#一次添加多列
df_append.assign(col1=lambda x:x['Gender']*2,
col2=s)
Gender | Height | col1 | col2 | |
---|---|---|---|---|
0 | M | 173 | MM | a |
1 | F | 192 | FF | b |
2 | M | 186 | MM | c |
3 | F | 167 | FF | d |
#combine函数
df_combine_1 = df.loc[:1,['Gender','Height']].copy()
df_combine_2 = df.loc[10:11,['Gender','Height']].copy()
#df_combine_1.combine(df_combine_2)
df_combine_1.combine(df_combine_2,lambda x,y:print(x,y))
0 M 1 F 10 NaN 11 NaN Name: Gender, dtype: object 0 NaN 1 NaN 10 M 11 F Name: Gender, dtype: object 0 173.0 1 192.0 10 NaN 11 NaN Name: Height, dtype: float64 0 NaN 1 NaN 10 161.0 11 175.0 Name: Height, dtype: float64
Gender | Height | |
---|---|---|
0 | NaN | NaN |
1 | NaN | NaN |
10 | NaN | NaN |
11 | NaN | NaN |
#根据列均值大小进行填充 x y 分别代表df1 df2 的第一列 第二列
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [8, 7], 'B': [6, 5]})
df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y)
A | B | |
---|---|---|
0 | 8 | 6 |
1 | 7 | 5 |
#索引对齐特性(既指行索引也指列索引)(默认状态下,后面的表没有的行列都会设置为NaN)¶
df2 = pd.DataFrame({'B': [8, 7], 'C': [6, 5]})
df1.combine(df2,lambda x,y:x if x.mean()>y.mean() else y)
A | B | C | |
---|---|---|---|
0 | NaN | 8 | 6.0 |
1 | NaN | 7 | 5.0 |
#combine_first方法 df2填补df1的缺失值
df1 = pd.DataFrame({'A': [None, 0], 'B': [None, 4]})
df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
df1.combine_first(df2)
A | B | |
---|---|---|
0 | 1.0 | 3.0 |
1 | 0.0 | 4.0 |
#同时可以指定索引
df1 = pd.DataFrame({'A': [None, 0], 'B': [4, None]})
df2 = pd.DataFrame({'B': [3, 3], 'C': [1, 1]}, index=[1, 2])
df1.combine_first(df2)
A | B | C | |
---|---|---|---|
0 | NaN | 4.0 | NaN |
1 | 0.0 | 3.0 | 1.0 |
2 | NaN | 3.0 | 1.0 |
#update方法 默认使用左连接
df1 = pd.DataFrame({'A': [1, 2, 3],
'B': [400, 500, 600]})
df2 = pd.DataFrame({'B': [4, 5, 6],
'C': [7, 8, 9]})
df1.update(df2)
df1
A | B | |
---|---|---|
0 | 1 | 4 |
1 | 2 | 5 |
2 | 3 | 6 |
#update属性 缺失值不会填充 还是按照第一个的值
df1 = pd.DataFrame({'A': [1, 2, 3],
'B': [400, 500, 600]})
df2 = pd.DataFrame({'B': [4, np.nan, 6]})
df1.update(df2)
df1
A | B | |
---|---|---|
0 | 1 | 4.0 |
1 | 2 | 500.0 |
2 | 3 | 6.0 |
#concat默认使用纵向连接 axis = 0
df1 = pd.DataFrame({'A': ['A0', 'A1'],
'B': ['B0', 'B1']},
index = [0,1])
df2 = pd.DataFrame({'A': ['A2', 'A3'],
'B': ['B2', 'B3']},
index = [2,3])
df3 = pd.DataFrame({'A': ['A1', 'A3'],
'D': ['D1', 'D3'],
'E': ['E1', 'E3']},
index = [1,3])
pd.concat([df1,df2])
A | B | |
---|---|---|
0 | A0 | B0 |
1 | A1 | B1 |
2 | A2 | B2 |
3 | A3 | B3 |
pd.concat([df1,df2],axis = 1)
A | B | A | B | |
---|---|---|---|---|
0 | A0 | B0 | NaN | NaN |
1 | A1 | B1 | NaN | NaN |
2 | NaN | NaN | A2 | B2 |
3 | NaN | NaN | A3 | B3 |
#join设置为内连接(由于axis=0,因此列取交集) 只是看列名的交集 并不是列里面值的交集、
pd.concat([df3,df1],join='inner')
A | |
---|---|
1 | A1 |
3 | A3 |
0 | A0 |
1 | A1 |
#join设置为外链接 里面的sort函数设置列排序
pd.concat([df3,df1],join='outer',sort=True)
A | B | D | E | |
---|---|---|---|---|
1 | A1 | NaN | D1 | E1 |
3 | A3 | NaN | D3 | E3 |
0 | A0 | B0 | NaN | NaN |
1 | A1 | B1 | NaN | NaN |
df1
A | B | |
---|---|---|
0 | A0 | B0 |
1 | A1 | B1 |
pd.concat([df1,df2])
A | B | |
---|---|---|
0 | A0 | B0 |
1 | A1 | B1 |
2 | A2 | B2 |
3 | A3 | B3 |
#key参数用于对不同的数据框增加一个标号,便于索引
#keys相当于设置表的title
pd.concat([df1,df2], keys=['x', 'y'])
A | B | ||
---|---|---|---|
x | 0 | A0 | B0 |
1 | A1 | B1 | |
y | 2 | A2 | B2 |
3 | A3 | B3 |
#merge/join与concat的不同之处在于on参数,可以指定某一个对象为key来进行连接
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
right2 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3']})
#返回的是左右两边都存在时发的结果 merge默认使用的是内连接 完全重复的不会返回?
pd.merge(left, right, on='key1')
key1 | key2_x | A | B | key2_y | C | D | |
---|---|---|---|---|---|---|---|
0 | K0 | K0 | A0 | B0 | K0 | C0 | D0 |
1 | K0 | K1 | A1 | B1 | K0 | C0 | D0 |
2 | K1 | K0 | A2 | B2 | K0 | C1 | D1 |
3 | K1 | K0 | A2 | B2 | K0 | C2 | D2 |
4 | K2 | K1 | A3 | B3 | K0 | C3 | D3 |
left
key1 | key2 | A | B | |
---|---|---|---|---|
0 | K0 | K0 | A0 | B0 |
1 | K0 | K1 | A1 | B1 |
2 | K1 | K0 | A2 | B2 |
3 | K2 | K1 | A3 | B3 |
right
key1 | key2 | C | D | |
---|---|---|---|---|
0 | K0 | K0 | C0 | D0 |
1 | K1 | K0 | C1 | D1 |
2 | K1 | K0 | C2 | D2 |
3 | K2 | K0 | C3 | D3 |
pd.merge(left, right, on=['key1','key2'])
key1 | key2 | A | B | C | D | |
---|---|---|---|---|---|---|
0 | K0 | K0 | A0 | B0 | C0 | D0 |
1 | K1 | K0 | A2 | B2 | C1 | D1 |
2 | K1 | K0 | A2 | B2 | C2 | D2 |
right = pd.DataFrame({'A': [4, 5, 6], 'B': [2, 3, 4]})
left = pd.DataFrame({'A': [1, 2], 'B': [2, 1]})
validate检验的是到底哪一边出现了重复索引,如果是“one_to_one”则两侧索引都是唯一,如果"one_to_many"则左侧唯一
left = pd.DataFrame({'A': [1, 2], 'B': [2, 1]})
pd.merge(left, right, on='B', how = 'outer',validate='one_to_one')
A_x | B | A_y | |
---|---|---|---|
0 | 1.0 | 2 | 4.0 |
1 | 2.0 | 1 | NaN |
2 | NaN | 3 | 5.0 |
3 | NaN | 4 | 6.0 |
#indicator参数指示了,合并后该行索引的来源
df1 = pd.DataFrame({'col1': [0, 1], 'col_left': ['a', 'b']})
df2 = pd.DataFrame({'col1': [1, 2, 2], 'col_right': [2, 2, 2]})
pd.merge(df1, df2, on='col1', how='outer', indicator=True)
col1 | col_left | col_right | _merge | |
---|---|---|---|---|
0 | 0 | a | NaN | left_only |
1 | 1 | b | 2.0 | both |
2 | 2 | NaN | 2.0 | right_only |
3 | 2 | NaN | 2.0 | right_only |
#join函数默认使用的是左连接
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']},
index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
'D': ['D0', 'D2', 'D3']},
index=['K0', 'K2', 'K3'])
left.join(right)
A | B | C | D | |
---|---|---|---|---|
K0 | A0 | B0 | C0 | D0 |
K1 | A1 | B1 | NaN | NaN |
K2 | A2 | B2 | C2 | D2 |
#对于多对一模式下的合并 使用join比较方便 因为其默认使用左连接?
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'key': ['K0', 'K1', 'K0', 'K1']})
right = pd.DataFrame({'C': ['C0', 'C1'],
'D': ['D0', 'D1']},
index=['K0', 'K1'])
left.join(right, on='key')
A | B | key | C | D | |
---|---|---|---|---|---|
0 | A0 | B0 | K0 | C0 | D0 |
1 | A1 | B1 | K1 | C1 | D1 |
2 | A2 | B2 | K0 | C0 | D0 |
3 | A3 | B3 | K1 | C1 | D1 |
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1']})
index = pd.MultiIndex.from_tuples([('K0', 'K0'), ('K1', 'K0'),
('K2', 'K0'), ('K2', 'K1')],names=['key1','key2'])
right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']}, index=index)
right
C | D | ||
---|---|---|---|
key1 | key2 | ||
K0 | K0 | C0 | D0 |
K1 | K0 | C1 | D1 |
K2 | K0 | C2 | D2 |
K1 | C3 | D3 |
练习题 练习一
#这两张表既有重复的元素 也有不重复的 总共80个员工
df1 = pd.read_csv('data/Employee1.csv')
df2 = pd.read_csv('data/Employee2.csv')
问题一:每个公司有多少员工满足如下条件:既出现第一张表,又出现在第二张表。
#使用到了集合 还有intersection函数
L = list(set(df1['Name']).intersection(set(df2['Name'])))
L
['c12', 'b7', 'e10', 'c13', 'a1', 'b1', 'd10', 'a3', 'b15', 'a6', 'c3', 'e11', 'e8', 'c10', 'd5', 'b3']
问题二:将所有不符合(a)中条件的行筛选出来,合并为一张新表,列名与原表一致。¶
df_b1 = df1[~df1['Name'].isin(L)]
df_b2 = df2[~df2['Name'].isin(L)]
df_b = pd.concat([df_b1,df_b2]).set_index('Name')
df_b.head()
Company | Age | Height | Weight | Salary | |
---|---|---|---|---|---|
Name | |||||
a4 | A | 43 | 158 | 62.5 | 21755 |
a7 | A | 49 | 171 | 94.6 | 6177 |
a8 | A | 51 | 168 | 89.5 | 3246 |
a9 | A | 36 | 186 | 62.8 | 3569 |
a13 | A | 58 | 190 | 75.9 | 21854 |
df_b.shape
(45, 5)
练习二:
df1 = pd.read_csv('data/Course1.csv')
df2 = pd.read_csv('data/Course2.csv')
问题一:将两张表分别拆分为专业课和非专业课
a = ["学科基础课","专业必修课","专业选修课"]
df_a11 = df1[df1["课程类别"].isin(a)]
df_a12 = df1[~df1["课程类别"].isin(a)]
df_a21 = df2[df2["课程类别"].isin(a)]
df_a22 = df2[~df2["课程类别"].isin(a)]
问题二:将两张专业课的分数表和两张非专业课的分数表分别合并
common = pd.concat([df_a11,df_a21])
common
课程名字 | 课程类别 | 学分 | 分数 | |
---|---|---|---|---|
1 | 云计算应用与开发 | 专业选修课 | 3 | 96.0 |
2 | 社会计算 | 专业选修课 | 3 | 78.0 |
3 | 深度学习 | 专业选修课 | 3 | 75.0 |
4 | 人工智能导论 | 专业必修课 | 3 | 84.0 |
6 | 数据结构与算法 | 学科基础课 | 5 | 82.0 |
7 | 开源软件设计与开发 | 专业选修课 | 3 | 81.0 |
9 | 大数据应用案例 | 专业必修课 | 3 | 91.0 |
11 | 电子商务 | 专业选修课 | 3 | 74.0 |
12 | 高等数学(二) | 学科基础课 | 4 | 92.0 |
14 | 计算机视觉 | 专业选修课 | 3 | NaN |
15 | 离散数学 | 学科基础课 | 4 | 82.0 |
16 | 数据科学的数学基础 | 专业必修课 | 4 | 75.0 |
17 | 程序设计 | 学科基础课 | 4 | 84.0 |
19 | 线性代数 | 学科基础课 | 3 | 97.0 |
21 | 机器学习 | 专业选修课 | 3 | 88.0 |
22 | 位置服务 | 专业选修课 | 3 | 87.0 |
26 | 数据挖掘 | 专业必修课 | 4 | 71.0 |
28 | 概率图模型 | 专业选修课 | 3 | 96.0 |
30 | 高等统计选讲 | 专业选修课 | 3 | 87.0 |
31 | 推荐系统 | 专业选修课 | 3 | 97.0 |
32 | 智慧城市 | 专业选修课 | 3 | 77.0 |
0 | 高等数学(一) | 学科基础课 | 4 | 99.0 |
1 | 数据科学与工程导论 | 学科基础课 | 3 | NaN |
2 | 专业英语 | 学科基础课 | 2 | 100.0 |
3 | 概率论 | 学科基础课 | 3 | 99.0 |
4 | 计算机系统 | 专业必修课 | 4 | 80.0 |
5 | 数据科学与工程算法 | 专业必修课 | 3 | 99.0 |
6 | 操作系统 | 专业必修课 | 4 | 89.0 |
7 | 分布式模型与编程 | 专业必修课 | 4 | 81.0 |
8 | 数据管理系统 | 专业必修课 | 6 | 70.0 |
9 | 统计与数据分析基础 | 专业必修课 | 4 | 82.0 |
10 | 商业分析 | 专业必修课 | 3 | 70.0 |
11 | 数据伦理 | 专业必修课 | 1 | NaN |
12 | 设计思维 | 专业选修课 | 3 | 73.0 |
13 | 统计分析软件(R语言) | 专业选修课 | 3 | 83.0 |
14 | 软件工程 | 专业选修课 | 3 | 91.0 |
15 | 数据仓库与OLAP | 专业选修课 | 3 | 94.0 |
16 | 数据库系统实现 | 专业选修课 | 3 | 98.0 |
17 | 大数据处理工具 | 专业选修课 | 3 | 73.0 |
18 | 统计推断 | 专业选修课 | 3 | 75.0 |
19 | 信息检索 | 专业选修课 | 3 | 93.0 |
20 | 信息可视化 | 专业选修课 | 3 | 93.0 |
21 | 自然语言处理 | 专业选修课 | 3 | 80.0 |
22 | 统计学习 | 专业选修课 | 3 | 81.0 |
23 | 计算广告 | 专业选修课 | 3 | 99.0 |
24 | 前端设计与开发 | 专业选修课 | 3 | 90.0 |
special = pd.concat([df_a12,df_a22])
special
课程名字 | 课程类别 | 学分 | 分数 | |
---|---|---|---|---|
0 | 思想道德修养与法律基础 | 思政类 | 3 | 89.0 |
5 | 中国近代史纲要 | 思政类 | 3 | 97.0 |
8 | 网球(初) | 体育类 | 1 | 81.0 |
10 | 极端性气候与陆地生态系统 | 公共任意选修类 | 2 | 78.0 |
13 | 游泳(初) | 体育类 | 1 | 75.0 |
18 | 足球(初) | 体育类 | 1 | 100.0 |
20 | 毛泽东思想和中国特色社会主义理论体系概论(一) | 思政类 | 3 | 99.0 |
23 | 学术英语听说(一) | 英语类 | 2 | 85.0 |
24 | 程序正义与经典案例解析 | 精品课程 | 2 | 76.0 |
25 | 环境可持续发展 | 公共任意选修类 | 2 | 76.0 |
27 | 毛泽东思想和中国特色社会主义理论体系概论(二) | 思政类 | 3 | 93.0 |
29 | 篮球(初) | 体育类 | 1 | 77.0 |
25 | 学术英语听说(二) | 英语类 | 2 | 92.0 |
26 | 学术英语阅读 | 英语类 | 2 | 72.0 |
27 | 学术英语写作 | 英语类 | 2 | 98.0 |
28 | 美国社会与文化 | 英语类 | 2 | 77.0 |
29 | 马克思主义基本原理概论 | 思政类 | 3 | 95.0 |
30 | 军事理论 | 思政类 | 2 | 87.0 |
31 | 大学语文 | 文化传承类 | 2 | 100.0 |
32 | 现代交通地理学 | 公共任意选修类 | 2 | 88.0 |
33 | 植物王国 | 公共任意选修类 | 2 | 92.0 |
第三题:请直接读取两张表合并后拆分
#先使用concat函数进行合并
df = pd.concat([df1,df2])
#query函数进行判断
special2 = df.query('课程类别 in ["学科基础课","专业必修课","专业选修课"]')
common2 = df.query('课程类别 not in ["学科基础课","专业必修课","专业选修课"]')
第四题;专业课程中有缺失值吗,如果有的话请在完成(3)的同时,用组内(3种类型的专业课)均值填充缺失值后拆分。
special2.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 46 entries, 1 to 24 Data columns (total 4 columns): 课程名字 46 non-null object 课程类别 46 non-null object 学分 46 non-null int64 分数 43 non-null float64 dtypes: float64(1), int64(1), object(2) memory usage: 1.8+ KB
#要掌握分组进行缺失值填充
df['分数'] = df.groupby('课程类别').transform(lambda x: x.fillna(x.mean()))['分数']
df
课程名字 | 课程类别 | 学分 | 分数 | |
---|---|---|---|---|
0 | 思想道德修养与法律基础 | 思政类 | 3 | 89.000000 |
1 | 云计算应用与开发 | 专业选修课 | 3 | 96.000000 |
2 | 社会计算 | 专业选修课 | 3 | 78.000000 |
3 | 深度学习 | 专业选修课 | 3 | 75.000000 |
4 | 人工智能导论 | 专业必修课 | 3 | 84.000000 |
5 | 中国近代史纲要 | 思政类 | 3 | 97.000000 |
6 | 数据结构与算法 | 学科基础课 | 5 | 82.000000 |
7 | 开源软件设计与开发 | 专业选修课 | 3 | 81.000000 |
8 | 网球(初) | 体育类 | 1 | 81.000000 |
9 | 大数据应用案例 | 专业必修课 | 3 | 91.000000 |
10 | 极端性气候与陆地生态系统 | 公共任意选修类 | 2 | 78.000000 |
11 | 电子商务 | 专业选修课 | 3 | 74.000000 |
12 | 高等数学(二) | 学科基础课 | 4 | 92.000000 |
13 | 游泳(初) | 体育类 | 1 | 75.000000 |
14 | 计算机视觉 | 专业选修课 | 3 | 85.791667 |
15 | 离散数学 | 学科基础课 | 4 | 82.000000 |
16 | 数据科学的数学基础 | 专业必修课 | 4 | 75.000000 |
17 | 程序设计 | 学科基础课 | 4 | 84.000000 |
18 | 足球(初) | 体育类 | 1 | 100.000000 |
19 | 线性代数 | 学科基础课 | 3 | 97.000000 |
20 | 毛泽东思想和中国特色社会主义理论体系概论(一) | 思政类 | 3 | 99.000000 |
21 | 机器学习 | 专业选修课 | 3 | 88.000000 |
22 | 位置服务 | 专业选修课 | 3 | 87.000000 |
23 | 学术英语听说(一) | 英语类 | 2 | 85.000000 |
24 | 程序正义与经典案例解析 | 精品课程 | 2 | 76.000000 |
25 | 环境可持续发展 | 公共任意选修类 | 2 | 76.000000 |
26 | 数据挖掘 | 专业必修课 | 4 | 71.000000 |
27 | 毛泽东思想和中国特色社会主义理论体系概论(二) | 思政类 | 3 | 93.000000 |
28 | 概率图模型 | 专业选修课 | 3 | 96.000000 |
29 | 篮球(初) | 体育类 | 1 | 77.000000 |
... | ... | ... | ... | ... |
4 | 计算机系统 | 专业必修课 | 4 | 80.000000 |
5 | 数据科学与工程算法 | 专业必修课 | 3 | 99.000000 |
6 | 操作系统 | 专业必修课 | 4 | 89.000000 |
7 | 分布式模型与编程 | 专业必修课 | 4 | 81.000000 |
8 | 数据管理系统 | 专业必修课 | 6 | 70.000000 |
9 | 统计与数据分析基础 | 专业必修课 | 4 | 82.000000 |
10 | 商业分析 | 专业必修课 | 3 | 70.000000 |
11 | 数据伦理 | 专业必修课 | 1 | 81.090909 |
12 | 设计思维 | 专业选修课 | 3 | 73.000000 |
13 | 统计分析软件(R语言) | 专业选修课 | 3 | 83.000000 |
14 | 软件工程 | 专业选修课 | 3 | 91.000000 |
15 | 数据仓库与OLAP | 专业选修课 | 3 | 94.000000 |
16 | 数据库系统实现 | 专业选修课 | 3 | 98.000000 |
17 | 大数据处理工具 | 专业选修课 | 3 | 73.000000 |
18 | 统计推断 | 专业选修课 | 3 | 75.000000 |
19 | 信息检索 | 专业选修课 | 3 | 93.000000 |
20 | 信息可视化 | 专业选修课 | 3 | 93.000000 |
21 | 自然语言处理 | 专业选修课 | 3 | 80.000000 |
22 | 统计学习 | 专业选修课 | 3 | 81.000000 |
23 | 计算广告 | 专业选修课 | 3 | 99.000000 |
24 | 前端设计与开发 | 专业选修课 | 3 | 90.000000 |
25 | 学术英语听说(二) | 英语类 | 2 | 92.000000 |
26 | 学术英语阅读 | 英语类 | 2 | 72.000000 |
27 | 学术英语写作 | 英语类 | 2 | 98.000000 |
28 | 美国社会与文化 | 英语类 | 2 | 77.000000 |
29 | 马克思主义基本原理概论 | 思政类 | 3 | 95.000000 |
30 | 军事理论 | 思政类 | 2 | 87.000000 |
31 | 大学语文 | 文化传承类 | 2 | 100.000000 |
32 | 现代交通地理学 | 公共任意选修类 | 2 | 88.000000 |
33 | 植物王国 | 公共任意选修类 | 2 | 92.000000 |
67 rows × 4 columns
然后再进行分组,步骤同上
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。