数据酷客_Pandas数据分析_练习
数据分析
第一章
-
【单选】下面的代码输出是?
print(sum(range(5),-1)) from numpy import * print(sum(range(5),-1)) print(sum(range(5),0))
答案:9 10 10
内置函数sum
输出为range(5)
的和加上-1
,即0+1+2+3+4-1=9
from numpy import * numpy中的sum函数会覆盖内置函数,实际使用numpy.sum函数,参数-1
含义为按照-1
轴求和。这里只有一个维度,所有-1
和0
求和结果相同,即1+2+3+4=10 -
向量
-
请使用
linspace
函数创建一个初始值为0,终止值为100(不包含终止值),元素个数为70的一维数组 -
将结果保存在变量
a
中
import numpy as np #请在下方作答 a = np.linspace(0, 100, 70, endpoint=False) print(a)
-
-
数组
-
现已知一个5行6列的ndarray数组
a
-
请利用NumPy中的函数将数组
a
展平为一维数组,将结果保存在ndarray对象b
中
import numpy as np #请在下方作答 b = a.ravel() print(b)
-
-
现已知一个ndarray数组
a
,选取NumPy中适当的ufunc函数完成以下操作:-
请将数组
a
中的每一个元素进行向上取整,存储为变量b
-
请选出
b
中的最小值,存储为变量c
import numpy as np #请在下方作答 b = np.ceil(a) c = np.min(b) print(b) print(c)
-
-
生成等差数列
-
请使用NumPy中的函数生成从1开始到5结束(包含结束点),公差为0.2的等差数列,将结果保存在一维ndarray对象
x
中 -
调用ndarray类中的属性查看
x
的元素个数,将结果保存在变量x_len
中
import numpy as np x = np.arange(1, 5.2, 0.2) x_len = x.size print(x) print(x_len)
-
-
生成等比数列
-
请使用NumPy中的函数生成从1开始到512结束(包含结束点),公比为2的等比数列,将结果保存在一维ndarray对象
a
中 -
调用ndarray类中的方法将
a
变为2行5列的数组,保存在二维ndarray对象a_trans
中
-
-
数列索引
【多选】 已知2行5列的二维ndarray数组
z
,从z
中提取出第2行第3个元素,下列操作可行的是?选项1
z[1, 2]
选项2
z[1][2]
选项3
z[-1, 2]
选项4
z[-1][-3]
正确答案:选项1,2,3,4。
-
一维数组切片
【多选】 已知长度为10的一维ndarray数组
data
,提取出最后3个元素,下列操作可行的是?选项1
data[7:10]
选项2
data[7:]
选项3
data[-3:]
选项4
data[[-3, -2, -1]]
答案1、2、3、4
-
逻辑索引
【单选】 已知二维ndarray数组
data
,从中提取出小于2或大于3的元素,下列操作可行的是?选项4
data[(data<2) | (data>3)]
正确答案:选项4。逻辑运算符and、or在布尔数组中无效。
-
结构数组
根据下列表格利用NumPy生成一个结构数组:
姓名 班级 成绩 张丽 1 85.5 赵宏 3 90.2 王刚 2 87.4 姓名
的类型是U50
(str),班级
的类型是i
(int),成绩
的类型是f
(float)- 将创建好的结构数组保存在ndarray对象
grade
中,请保证grade
中数据的顺序与表格中一致
正误判定变量:
grade
import numpy as np grade_dtype = np.dtype(dict(names=['姓名', '班级', '成绩'], formats=['U50', 'i', 'f'])) grade = np.array([('张丽', 1, 85.5),('赵宏', 3, 90.2), ('王刚', 2, 87.4)], dtype=grade_dtype) print(grade)
-
展平数组
import numpy as np z = np.array([[1, 1.5, 2], [0, 0.5, 1]]) z_1 = z.flatten() z_trans = z.reshape(3, 2) print(z) print(z_1) print(z_trans)
-
reshape和resize
答案解析:数组的
reshape
方法和resize
方法均可改变数组的维度和尺寸。 -
hstack和T
import numpy as np x = np.array([ [-1,3,-5], [0,-2,4] ]) y = np.array([ [7,-5,3], [-6,4,-2] ]) x_y = np.hstack([x, y]) x_y_trans = x_y.T print(x_y) print(x_y_trans)
-
vstack和vsplit
import numpy as np m = np.array([ [0,2,-4], [1,-3,5] ]) n = np.array([ [8,-1,2], [-9,6,-5] ]) m_n = np.vstack([m, n]) m_n_trans = np.vsplit(m_n, 4) print(m_n) print(m_n_trans)
第二章
-
正确答案:选项1和3。
答案解析:Series是带索引的一维数组,并没有列索引
-
import pandas as pd #请在下方作答 d = {'数学':pd.Series([90,76],index=['张三','李四']),'语文':pd.Series([87,95],index=['张三','李四'])} df = pd.DataFrame(d) print(df)
-
import pandas as pd loan_data = pd.read_csv('loandata.csv') #请在下方作答 loan_new = loan_data[['loan_amnt','grade','home_ownership']] loan_filtered = loan_new[loan_new['loan_amnt'] <20000] print(loan_filtered)
-
选项1
loan_data[loan_data['grade'].isin(['A'])]
选项2
loan_data[loan_data['grade'] == 'A']
选项3
loan_data[loan_data['grade'] = 'A']
选项4
loan_data[loan_data['sub_grade'] == 'A']
正确答案:选项1,2。
答案解析:选项4错误的通过'sub_grade'列进行筛选,不符合题目要求,错误。选项3,在进行逻辑判断时,应该使用==,而不是=,错误。
-
现已读入完整的贷款数据并存储为
loan_data
,数据结构为DataFrame:- 请选取
loan_amnt
,grade
和home_ownership
三列,并在此基础上选取后10条数据 - 将最终的结果保存为
loan_filtered
import pandas as pd loan_data = pd.read_csv('loandata.csv') #请在下方作答 loan_filtered = loan_data[['loan_amnt','grade','home_ownership']].iloc[-10:] print(loan_filtered)
- 请选取
-
正确答案:选项1,2,4。
答案解析:
.iloc[]
表示通过位置索引,.loc[]
表示通过标签索引,注意到题目要求的三列就是前3列,故选项1,2正确。选项3明显错误。选项4,注意在通过标签索引时,末端标签是包含的,故也正确 -
现已读入完整的贷款数据并存储为
loan_data
,数据结构为DataFrame,需要删除grade
一列。正确答案:选项1,2。
答案解析:使用
.pop()
和del
均可删除一列,选项1,2都正确
第三章
-
文件读取
- 请利用Pandas中的
.read_csv()
方法读取数据,将结果保存在DataFrame对象baby_names
中
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') print(baby_names)
- 请利用Pandas中的
-
数据展示
- 请利用Pandas中的
.head()
方法读取前10行数据,将结果保存在DataFrame对象baby_names_head_10
中
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv',sep=';') # 请在下方作答 # baby_names_head_10 = baby_names.head(10) print(baby_names_head_10)
- 请利用Pandas中的
-
汇总统计
- 请利用Pandas中的
.describe()
方法查看UsBabyNamesRight中数据集的基本统计信息,将结果保存为DataFrame对象baby_names_des
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv',sep=';') baby_names_des = baby_names.describe() print(baby_names_des)
- 请利用Pandas中的
-
获取数据类型
- 请利用Pandas中的
.dtypes
属性查看UsBabyNamesRight中各个字段的数据类型,将结果保存在Series对象baby_names_types
中
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv',sep=';') baby_names_types = baby_names.dtypes print(baby_names_types)
- 请利用Pandas中的
-
数据统计
- 请利用Pandas中的
.value_counts()
方法统计性别
这个字段中男性和女性的人数,将结果保存在Series对象baby_names_gender
中
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') baby_names_gender = baby_names['Gender'].value_counts() print(baby_names_gender)
- 请利用Pandas中的
-
查看数据集形状
- 请利用Pandas中的
.shape
属性查看UsBabyNamesRight的维度,将结果保存在变量baby_names_shape
中
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') baby_names_shape = baby_names.shape print(baby_names_shape)
- 请利用Pandas中的
-
数据筛选
- 请利用Pandas中的
.select_dtypes()
方法筛选出UsBabyNamesRight中数据类型为int64的数据,将结果保存为baby_names_int64
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') baby_names_int64 = baby_names.select_dtypes(include='int64') print(baby_names_int64)
- 请利用Pandas中的
-
数据筛选
- 请利用Pandas中的
.select_dtypes()
方法筛选出UsBabyNamesRight中除字段类型为int之外的数据,将结果保存在DataFrame对象baby_names_no_int
中
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') baby_names_no_int = baby_names.select_dtypes(exclude=['int']) print(baby_names_no_int)
- 请利用Pandas中的
-
描述性统计
- 请利用Pandas中的
.count()
方法查看UsBabyNamesRight每列中非缺失值样本的数量,将结果保存在Series对象baby_names_count
中(索引为列名,数据为非缺失样本的数量)
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') baby_names_count = baby_names.count() print(baby_names_count)
- 请利用Pandas中的
-
数据选取
- 请利用Pandas中的
.iloc[]
方法选取UsBabyNamesRight中的第二行数据,将结果保存在Series对象baby_names_second_line
中
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') baby_names_second_line = baby_names.iloc[1] print(baby_names_second_line)
- 请利用Pandas中的
-
缺失值数量分析
- 请利用Pandas中的
.isnull()
方法统计每个字段中缺失值的个数,将结果保存在Series对象baby_names_null_sum
中(其中索引为列名,数据为缺失值个数)
import pandas as pd baby_names = pd.read_csv('UsBabyNamesRight.csv') baby_names_null_sum = baby_names.isnull().sum() print(baby_names_null_sum)
- 请利用Pandas中的
第四章 数据转换与融合
-
数据合并1
请利用Pandas中的
.concat()
方法纵向合并df1,df2,df3
,(将df2
合并到df1
下方,将df3
合并到df2
下方),且不忽略df2
,df3
的索引,将结果保存为res
import pandas as pd import numpy as np #定义数据集 df1 = pd.DataFrame(np.zeros((3,4)), columns=['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4)), columns=['a','b','c','d']) df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d']) res = pd.concat([df1, df2, df3], axis=0) print(res)
-
数据合并6
请利用Pandas中的
.contact()
方法横向合并df1,df2
,将参数join_axes设置为df1
的索引,将结果保存为res
import pandas as pd import numpy as np #定义资料集 df1 = pd.DataFrame(np.zeros((3,4)), columns=['a','b','c','d'], index=[1,2,3]) df2 = pd.DataFrame(np.ones((3,4)), columns=['b','c','d','e'], index=[2,3,4]) res = pd.concat([df1, df2], axis=1, join_axes=[df1.index]) print(res)
-
数据合并7
请利用Pandas中的
.append()
方法将df2
添加至df1
的下面,并设置参数ignore_index不使用df2
的索引,将结果保存为res
.import pandas as pd import numpy as np #定义数据集 df1 = pd.DataFrame(np.zeros((3,4)), columns=['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4)), columns=['a','b','c','d']) res = df1.append(df2, ignore_index=True) print(res)
-
数据合并8
请利用Pandas中的
.append()
方法将df2
与df3
添加至df1
的下面,并设置参数ignore_index,不使用df2
与df3
的索引,将结果保存为res
import pandas as pd import numpy as np #定义数据集 df1 = pd.DataFrame(np.zeros((3,4)), columns=['a','b','c','d']) df2 = pd.DataFrame(np.ones((3,4)), columns=['a','b','c','d']) df3 = pd.DataFrame(np.ones((3,4)), columns=['a','b','c','d']) res = df1.append([df2, df3], ignore_index=True) print(res)
-
数据合并9
请利用Pandas中的
.append()
方法给df1
添加一行s1
,将结果保存为res
(提示:当添加的一行是Series时,必须将参数ignore_index
设置为True)import pandas as pd import numpy as np #定义数据集 df1 = pd.DataFrame(np.zeros((3,4)), columns=['a','b','c','d']) s1 = pd.Series([1,2,3,4], index=['a','b','c','d']) res = df1.append(s1, ignore_index=True) print(res)
-
重命名列名
请利用Pandas中的
.map()
方法将df1
列名转换为大写,将结果保存为res
import pandas as pd import numpy as np #定义数据集 df1 = pd.DataFrame(np.zeros((3,4)), columns=['a','b','c','d']) res = df1.columns.map(str.upper) print(res)
-
数据融合
现已读入这两份文件,分别存储在两个DataFrame对象
account_info
和loan_info
中。- 请使用
.merge()
方法,将account_info
和loan_info
分别作为左侧DataFrame和右侧DataFrame进行合并,连接键为user_id
,融合方式为左连接 - 请利用
indicator
参数,在融合结果中增加列名为indicator_column
的一列,取值代表融合的键只在左侧DataFrame中或者只在右侧DataFrame中,抑或是在两者中都存在 - 请将最终的结果保存为DataFrame对象
loan_merged
,并且使用.set_index()
方法设置索引为user_id
列。
import pandas as pd loan_info = pd.read_csv('loan_info.csv') account_info = pd.read_csv('account_info.csv') #请在下方作答 loan_merged = pd.merge(account_info,loan_info,on='user_id',how='left',indicator='indicator_column') loan_merged.set_index('user_id', inplace=True) print(loan_merged)
- 请使用
-
排序和随机采样
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
:- 请提取行索引为0-19的样本(包括行索引为0和19的样本),将提取结果随机重排,最终结果存为DataFrame对象
loan_data_random
,已经设置随机种子为111
import pandas as pd import numpy as np loan_data = pd.read_csv('loandata.csv') np.random.seed(111) #请在下方作答 loan_data_random = loan_data.take(np.random.permutation(20)) print(loan_data_random)
- 请提取行索引为0-19的样本(包括行索引为0和19的样本),将提取结果随机重排,最终结果存为DataFrame对象
-
排序和随机采样
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
:- 请利用
.sample()
方法随机采样20个样本,设置随机种子为111,并将采样结果按loan_amnt
降序排列,最终结果存为DataFrame对象loan_data_random
import pandas as pd import numpy as np loan_data = pd.read_csv('loandata.csv') #请在下方作答 loan_data_random = loan_data.sample(20,random_state=111).sort_values('loan_amnt',ascending = False) print(loan_data_random)
- 请利用
-
离散化和面元划分
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
:- 请利用
.sample()
方法随机采样30个样本,保存为DataFrame对象loan_data_new
,随机种子设置为111 - 请利用
.fillna()
方法对loan_data_new
的annual_inc
列使用均值填补 - 请将填补后的数据
annual_inc
进行离散化,使得大于0且小于等于50000的值为'A',大于50000且小于等于200000的值为'B',大于200000的值为'C' - 请将离散化结果存为Series对象
annual_inc_new
提示:
np.inf
代表正无穷。import pandas as pd import numpy as np loan_data = pd.read_csv('loandata.csv') #请在下方作答 loan_data_new = loan_data.sample(30,random_state=111) loan_data_new['annual_inc'].fillna(loan_data_new['annual_inc'].mean(),inplace=True) bins = [0,50000,200000,np.inf] labels = ['A','B','C'] annual_inc_new = pd.cut(loan_data_new['annual_inc'],bins=bins,labels=labels) print(annual_inc_new.value_counts())
- 请利用
-
离散化和面元划分
正确答案:选项2。
答案解析:
pd.qcut()
是等频离散化的函数,而pd.cut()
是根据距离离散化的函数,选项1,3使用pd.cut()
错误。pd.qcut()
需传入待离散化的Series和希望划分的面元数量,故选项4错误。 -
数据转换之map
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
,想要把grade
一列的'A','B','C'均转换为1,将'D','E','F'均转换为2,将修改后的数据替换到原数据loan_data
中,下列选项正确的是()mapping = {'A':1,'B':1,'C':1,'D':2,'E':2,'F':2} loan_data['grade'] = loan_data['grade'].map(mapping)
mapping = {'A':1,'B':1,'C':1,'D':2,'E':2,'F':2} loan_data = loan_data.replace(mapping)
mapping = {'A':1,'B':1,'C':1,'D':2,'E':2,'F':2} loan_data['grade'].map(mapping)
loan_data = loan_data.replace(['A','B','C','D','E','F'],[1,1,1,2,2,2])
正确答案:选项1,2,4。
答案解析:对于选项3,如不使用
loan_data['grade'] = loan_data['grade'].map(mapping)
替换原数据,则会产生一个新的Series对象,原数据则不会修改 -
数据转换之map
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
,想要把loan_data
的列名字符串全部转换为大写,将修改后的数据替换到原数据loan_data
中,下列选项正确的是()loan_data.columns = loan_data.columns.map(str.upper)
选项2
loan_data = loan_data.map(str.upper)
选项3
loan_data.columns.map(str.upper)
选项4
loan_data.columns = loan_data.columns.map(str.lower)
正确答案:选项1。
答案解析:使字符串全部转换为大写,应利用
str.upper
,选项4明显错误。要将列名转换为大写,应使用loan_data.columns = loan_data.columns.map(str.lower)
,选项2未选择列名,错误。对于选项3,没有保存修改到loan_data.columns
,则原数据不会产生修改 -
数据转换之哑变量编码
pd.get_dummies(df,columns=['grade'],prefix='g')
pd.get_dummies(df,columns=['grade'],drop_first=True,prefix='g')
pd.get_dummies(df,columns=['grade'],drop_first=True)
dummies = pd.get_dummies(df['grade'],drop_first=True,prefix='g') df[['loan_amnt','home_ownership']].join(dummies)
正确答案:选项2,4。
答案解析:图中编码结果删除了
grade
列第一个取值的编码特征,所以应该设置drop_first=True
,选项1错误。图中对哑变量设定了前缀'g',故选项3错误。 -
数据融合
现已读入这两份文件,分别存储在两个DataFrame对象
account_info
和loan_info
中。现要将account_info
作为左侧DataFrame,将loan_info
作为右侧DataFrame,将user_id
作为连接键,连接方式为外连接,并增加名为indicator_column
的一列,其取值表示融合的键只在左侧DataFrame中存在或只在右侧DataFrame中存在,抑或是在左右DataFrame中都存在。下列选项中,能完成上述要求的选项是()pd.merge(account_info,loan_info,on='user_id',how='outer',indicator='indicator_column')
选项2
pd.merge(account_info,loan_info,on='user_id',how='left')
选项3
pd.merge(account_info,loan_info,on='user_id',how='outer',indicator=True)
选项4
pd.merge(account_info,loan_info,on='user_id',how='left',indicator='indicator_column')
正确答案:选项1。
答案解析:题目要求连接方式为外连接,选项2,4使用左连接,错误。要求增加的指示列名为'indicator_column',选项3输出的指示列名为默认的'_merge',不符合题目要求
-
数据转换之文本数据规整
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
,其中sub_grade
一列的数据,形式均为字母+一位数字,如'B2':- 请提取
sub_grade
一列,使用Pandas中的矢量化字符串方法结合正则表达式,将该列所有数字转换为'X',然后把每个样本的字母和'X'分隔开,最后将分隔结果展开存为一个DataFrame对象loan_status_new
import pandas as pd import numpy as np loan_data = pd.read_csv('loandata.csv') #请在下方作答 loan_status_new = loan_data['sub_grade'].str.replace(r'\d','_X').str.split('_',expand=True) print(loan_status_new)
- 请提取
-
数据转换之哑变量编码
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
,下列选项中,能对grade
和home_ownership
两列进行哑变量编码,将第一个编码特征丢掉,并替换原来的grade
和home_ownership
两列,同时依次为两列增加前缀'g'和‘h'的选项是()pd.get_dummies(loan_data,columns=['grade'],drop_first=True,prefix=['g','h'])
选项2
pd.get_dummies(loan_data,columns=['grade','home_ownership'],prefix=['g','h'])
选项3
pd.get_dummies(loan_data,columns=['grade','home_ownership'],drop_first=True)
选项4
pd.get_dummies(loan_data,columns=['grade','home_ownership'],drop_first=True,prefix=['g','h'])
正确答案:选项4。
答案解析:选项1只对
grade
列进行哑变量编码,错误。选项2没有将第一个编码特征丢掉,错误。选项3没有按题目要求增加前缀,错误。 -
数据转换之文本数据规整
现已读入完整的贷款数据并存储为DataFrame对象
loan_data
,其中sub_grade
一列的数据,形式均为字母+一位数字,如'B2'。为了把sub_grade
一列所有数字转换为'X',并将修改后的数据替换到原数据,下列选项正确的是()loan_data['sub_grade'] = loan_data['sub_grade'].str.replace(r'\d','X')
选项2
loan_data['sub_grade'].str.replace(r'\d','X')
选项3
loan_data['sub_grade'] = loan_data['sub_grade'].str.replace(r'\d.','X')
选项4
loan_data['sub_grade'].str.replace(r'\d.','X')
正确答案:选项1。
答案解析:正则表达式'\d'用来匹配一位数字,选项2没有将修改后的数据替换到原数据,错误。选项3和选项4,正则表达式'\d.'用来匹配一个数字后跟一个任意字符,
sub_grade
列中形式均为字母+一位数字,匹配不到相关对象,无法产生替换,错误。
第五章
-
groupby() agg()
- 请利用Pandas中的
.groupby()
方法按ChestPain
与Sex
性别进行分组,顺序为先ChestPain
后Sex
- 对分组后的数据,提取
Age
和RestBP
两列,并依次输出Age
列的最大值,Age
列的最小值,RestBP
列的平均值 - 请将最终的结果保存为DataFrame对象
result
- 数据集已经导入,命名为
heart
,类型为DataFrame
import pandas as pd heart = pd.read_csv('Heart.csv') # 请在下方作答 result = heart.groupby(['ChestPain','Sex'])[['Age','RestBP']].agg(dict(Age=['max','min'], RestBP='mean')) print(result)
- 请利用Pandas中的
-
get_group()
- 请利用Pandas中的
.groupby()
方法按照ChestPain
进行分组,利用Pandas中的.get_group()
方法选取ChestPain
为0的类型的组 - 请将最终的结果保存为DataFrame对象
result
- 数据集已经导入,命名为
heart
,类型为DataFrame
import pandas as pd heart = pd.read_csv('Heart.csv') # 请在下方作答 result = heart.groupby('ChestPain').get_group(0) print(result)
- 请利用Pandas中的
-
transform()
- 请利用Pandas中的
.transform()
方法对每列数据分别计算新的两列转换数据,依次为原始数据减去对应列的平均值和原始数据减去对应列的最小值 - 请将最终的结果保存为DataFrame对象
result
- 数据集已经导入,命名为
heart
,类型为DataFrame
import pandas as pd heart = pd.read_csv('Heart.csv') # 请在下方作答 result = heart.transform([lambda x:x-x.mean(),lambda x:x-x.min()]) print(result)
- 请利用Pandas中的
-
size()
- 请利用Pandas中的
.groupby()
方法按照ChestPain
和Sex
进行分组,顺序为先ChestPain
后Sex
,并利用Pandas中的.size()
方法计算每组的样本数 - 请将最终的结果保存为Series对象
result
- 数据集已经导入,命名为
heart
,类型为DataFrame
import pandas as pd heart = pd.read_csv('Heart.csv') # 请在下方作答 result = heart.groupby(['ChestPain','Sex']).size() print(result)
- 请利用Pandas中的
-
聚合函数
【单选】现有一份已保存为DataFrame对象的成绩单数据
df
,数据中包含每位同学的class
班级信息、sex
性别信息、math
数学成绩信息和english
英语成绩信息。下列选项中,可以将数据按班级和性别分组后提取math
和english
两列,并对math
列用平均值聚合,english
列用最大值聚合的是()选项1
df.groupby(['class','sex']).mean()
选项2
df.groupby(['class','sex']).max()
df.groupby(['class','sex']).agg({'math':'mean','english':'max'})
选项4
df.groupby(['sex']).agg({'math':'mean','english':'max'})
正确答案:选项3。
答案解析:使用Pandas中的
.groupby()
方法按多列进行分组后,对不同列应用不同聚合函数,只需对.agg()
方法传入一个字典,字典的键-值对为列-该列的聚合函数。 -
GroupBy技术
【单选】现有一份已保存为DataFrame对象的成绩单数据
df
,数据中包含每位同学的class
班级信息、sex
性别信息、math
数学成绩信息、english
英语成绩信息、chemistry
化学成绩信息。下列选项中,可以将数据按照班级和性别分组,并只选择math
和english
成绩两列,且采用均值聚合的是()df.groupby(['class','sex'])[['math','english']].mean()
选项2
df.groupby(['class','sex']).mean()
选项3
df.groupby(['class'])[['math','english']].mean()
选项4
df.groupby(['class']).mean()
正确答案:选项1。
答案解析:使用Pandas中的
.groupby()
方法按多列进行分组并选择其中一部分列,使用均值聚合的形式为:df.groupby(['col1','col2'])[['col3','col4']].mean()
。 -
mean() agg('mean')
【多选】现有一份已保存为DataFrame对象的成绩单数据
df
,数据中包含每位同学的class
班级信息、sex
性别信息、math
数学成绩、english
英语成绩、chemistry
化学成绩。下列选项中,可以将数据按照班级和性别分组,不把分组的键当作索引列,并分别求分组后每列的均值的是()df.groupby(['class','sex'],as_index = False).mean()
选项2
df.groupby(['class','sex']).mean()
df.groupby(['class','sex'],as_index = False).agg('mean')
选项4
df.groupby(['class','sex']).agg('mean')
正确答案:选项1,选项3。
答案解析:使用
.groupby()
按多列进行分组时候,传入as_index = False
即可不把分组的键当作索引,故排除选项2和4,使用均值聚合时,两种方法.mean()
和.agg('mean')
效果相同。 -
lambda
现有一份已保存为DataFrame对象的成绩单数据
df
,数据中包含每位同学的math
数学成绩、english
英语成绩、chemistry
化学成绩。下列选项中,可以使得数据转换为对应成绩减去该课程的平均分的选项是()选项1
df.transform(lambda x:x-x.max())
df.transform(lambda x:x-x.mean())
df.apply(lambda x:x-x.mean())
df.agg(lambda x:x-x.mean())
正确答案:选项2、3、4。
答案解析:选项1为每个数据减去对应列的最大值,显然错误,其它三个选项都是可以的。
-
mapping
【单选】现有一份已保存为DataFrame对象的成绩单数据
df
,数据中包含每位同学的math
数学成绩、english
英语成绩、chemistry
化学成绩。下列选项中,可以按列分组,使得english
为一组,其他成绩为另一组,并对各组数据沿横向轴求平均值的是()mapping = {'math':1,'english':0,'chemistry':1} df.groupby(mapping,axis=1).mean()
选项2
mapping = {'math':1,'english':0,'chemistry':1} df.groupby(mapping).mean()
选项3
df.groupby(axis=1).mean()
选项4
mapping = {'math':1,'english':0} df.groupby(mapping,axis=1).mean()
正确答案:选项1。
答案解析:使用Pandas中的
groupby
方法进行分组时,可通过传入字典,并设置参数axis=1
进行沿横向轴分组求平均值。
第六章 时间
-
时间差
两个
datetime
对象之间的时间差为timedelta
类型。 -
字符串转日期
【多选】要将字符串
date='2017-01-01'
转换为日期数据,可以使用()选项1
from datetime import datetime datetime.strftime(date)
from datetime import datetime datetime.strptime(date)
选项3
str(date)
import pandas as pd pd.to_datetime(date)
正确答案:选项2、4。
答案解析:选项1中
strftime
用于将日期转换为字符串,选项2中strptime
用于将字符串转换为日期,选项3中str
用于将日期转换为字符串。 -
调整日期
现已创建一个日期变量
time
:- 请将该日期调整到10天前的日期,结果存储为datetime对象
delta
提示:可以利用datetime模块中的
timedelta()
方法from datetime import datetime from datetime import timedelta time = datetime(2019, 1, 5) #请在下方作答 delta = time - timedelta(10) print(delta)
- 请将该日期调整到10天前的日期,结果存储为datetime对象
-
日期转字符串
现已创建一个数据类型为
datetime
的日期变量stamp
:- 请将该日期转换为字符串,其格式设置为:“2位数的年-2位数的月-2位数的日”,如“18-01-01”,结果存储为
result
变量
from datetime import datetime #请在下方作答 result = stamp.strftime('%y-%m-%d') print(result)
- 请将该日期转换为字符串,其格式设置为:“2位数的年-2位数的月-2位数的日”,如“18-01-01”,结果存储为
-
日期和时间数据
现已创建一个字符串变量
datestr
:- 请将该字符串转换成日期,结果存储为datetime对象
result
提示:该字符串中记录的是2018年12月6日下午1时
from dateutil.parser import parse datestr = '6/12/2018 1:00 PM' #请在下方作答 result = parse(datestr,dayfirst=True) print(result)
- 请将该字符串转换成日期,结果存储为datetime对象
-
日期的范围、频率及移动
【单选】以下代码生成的日期范围是()
import pandas as pd pd.date_range('20180501','20180812',freq='M')
选项3
'2018-05-31', '2018-06-30', '2018-07-31'
正确答案:选项3。
答案解析:基础频率
M
表示每月最后一个日历日。start:str 或 datetime,日期左边界
end:str 或 datetime, 日期右边界closed:{None, ‘left’, ‘right’}, 三个选项,默认None(两边闭合),closed=‘left’左闭右开,closed='right’左开右闭
-
日期的范围、频率及移动
【单选】现已知一个Pandas时间序列对象
ts
,下列代码能够实现索引不变数据前移5位的是()选项1
ts.shift(freq=5)
选项2
ts.shift(freq=-5)
选项3
ts.shift(5)
ts.shift(-5)
正确答案:选项4。
答案解析:
freq
参数传入的应是基础频率;选项3实现索引不变数据后移5位
第七章 数据可视化
-
散点图
使用Pandas进行数据可视化,利用DataFrame对象
data
中的a
与b
列来绘制散点图,则下列代码片段正确的是( )data.plot(kind='scatter',x='a',y='b')
正确答案:选项3。
答案解析:
kind
参数设置为:pie(饼图),barh(条形图),bar(柱形图),scatter(散点图),hist(直方图),必须要指定横轴和纵轴。 -
六边箱图
【多选】使用Pandas中的
DataFrame.plot.hexbin()
绘制六边箱图,下列说法正确的是六边箱图又名高密度散点图,如果数据点太密集,六边箱图效果比散点图更好;
参数
gridsize
设置x轴方向的六边型数量,默认为100。 -
Matplotlib简介3
- 使用Pandas提取"超时空同居"在2018年6月22日到7月1日的影片数据,命名为
df_1
(包括6月22,不包括7月1) - 使用Matplotlib绘图绘制以时间为x轴,票房为y轴的折线图
- 添加图例
- 将x轴刻度标签旋转30度
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('movie.csv') ## 提取"超时空同居"影片数据 df_1 = data[(data['movieName']=='超时空同居')&(data['time']<'2018-07-01')&(data['time']>='2018-06-22')] ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 plt.plot(df_1['time'],df_1['boxInfo']) plt.legend() plt.xticks(rotation=30)
- 使用Pandas提取"超时空同居"在2018年6月22日到7月1日的影片数据,命名为
-
Matplotlib简介4
- 使用Pandas提取"超时空同居"在2018年6月22日到7月1日的影片数据,命名为
df_1
(包括6月22,不包括7月1) - 使用Matplotlib绘图绘制以时间为x轴,场均人次为y轴的折线图
- 添加图形标题为:六月底"超时空同居"场均人次情况
- 添加x轴标签、 y轴标签分别为"时间","场均人次"
- 将x轴刻度标签旋转35度
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('movie.csv') ## 提取"超时空同居"影片数据 df_1 = data[(data['movieName']=='超时空同居')&(data['time']<'2018-07-01')&(data['time']>='2018-06-22')] ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 plt.plot(df_1['time'],df_1['avgShowView']) plt.title('六月底“超时空同居”的场均人次情况') plt.xlabel('时间') plt.ylabel('场均人次') plt.xticks(rotation=35)
- 使用Pandas提取"超时空同居"在2018年6月22日到7月1日的影片数据,命名为
-
折线图3
分析种族对学生成绩的影响
- 使用Pandas按照种族对成绩进行分组聚合,此步骤已默认给出
- 使用Pandas绘图绘制种族对学生阅读成绩影响的折线图,要求显示x轴刻度标签,并旋转30度
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 按照种族进行分组聚合 df_1 = data.groupby('race/ethnicity')[('math score','reading score','writing score')].mean() ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 df_1['reading score'].plot(xticks=[0,1,2,3,4],rot=30)
-
折线图4
分析种族对学生成绩的影响
- 使用Pandas按照种族对成绩进行分组聚合,此步骤已默认给出
- 使用Pandas绘图绘制种族对学生写作成绩影响的折线图,要求显示x轴刻度标签,并旋转30度,线条颜色为黄色,线条粗细为1.5,线条样式为'--'
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 按照种族进行分组聚合 df_1 = data.groupby('race/ethnicity')[('math score','reading score','writing score')].mean() ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 df_1['writing score'].plot(xticks=[0,1,2,3,4],rot=30,color='y',linewidth=1.5,linestyle='--')
-
折线图5
分析种族对学生成绩的影响
- 使用Pandas按照种族对成绩进行分组聚合,此步骤已默认给出
- 使用Pandas绘图绘制种族对学生写作成绩影响的折线图,要求要求显示x轴刻度标签,并旋转30度,线条颜色为'blue',粗细为1.2,样式为'-.',点的标记样式为五边形,标记点大小为10
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 按照种族进行分组聚合 df_1 = data.groupby('race/ethnicity')[('math score','reading score','writing score')].mean() ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 df_1['writing score'].plot(xticks=[0,1,2,3,4],rot=30,lw=1.2,style='bp-.',ms=10) ## 绘图 df_1['writing score'].plot(xticks=[0,1,2,3,4],rot=30,linestyle='-.',color='b',linewidth=1.2,marker='p',ms=10)
-
条形图1
- 使用
value_counts
统计各父母教育水平频数,命名为s
- 使用Pandas绘图绘制
s
的条形图,要求x轴刻度标签旋转30度,其余参数默认 - 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 计算parental level of education的出现频数 s = data['parental level of education'].value_counts() ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 s.plot.bar(rot=30)
- 使用
-
条形图2
- 使用
value_counts
统计各父母教育水平频数,命名为s
- 使用Pandas绘图绘制
s
的水平条形图,要求添加图形标题为"父母教育水平分布" - 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形、
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 计算parental level of education的出现频数 s = data['parental level of education'].value_counts() ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 s.plot.barh() plt.title('父母教育水平分布')
- 使用
-
条形图4
- 使用Pandas按照父母教育程度对成绩进行分组聚合,此步骤已默认给出
- 使用Pandas绘图绘制每组三种成绩的水平条形图,设置y轴标签为'父母教育程度',x轴标签为'各科平均分'
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 按照父母教育程度进行分组聚合 df_1 = data.groupby('parental level of education')[('math score','reading score','writing score')].mean() ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 df_1.plot.barh() plt.ylabel('父母教育程度') plt.xlabel('各科平均分')
-
直方图1
- 使用Pandas绘图绘制写作分数的直方图,设置颜色为'green',x轴标签为'写作分数',y轴标签为'频数',设置拆分面元数量为7
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 data['writing score'].plot.hist(bins=7,color='g') plt.xlabel('写作分数') plt.ylabel('频数')
-
直方图2
- 使用Pandas绘图绘制三种成绩的直方图,将各列分布直方图分别绘制在不同子图中,子图图形大小设置为(5,7)
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 data[['math score','reading score','writing score']].plot.hist(subplots=True,figsize=(5,7))
-
箱线图1
- 使用Pandas绘图绘制三种成绩的箱线图,图形标题为'各科分数分布箱线图',y轴标签为'分数'
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 data[['math score','reading score','writing score']].plot.box() plt.title('各科分数分布箱线图') plt.ylabel('分数')
-
箱线图2
- 使用Pandas绘图绘制三种成绩的水平箱线图,要求图形标题为'各科分数分布箱线图',x轴标签为'分数',填充箱体颜色且设置异常点的颜色为'red'
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认开启
matplotlib line
模式,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 data[['math score','reading score','writing score']].plot.box(vert=False,sym='r',patch_artist=True) plt.title('各科分数分布箱线图') plt.xlabel('分数')
-
气泡图
- 依据Pandas的绘图机制,绘制一个气泡图,显示阅读分数和写作分数的关系,气泡大小表示父母的教育水平
- 已经将父母的教育水平转化为数值,存入列名
edu
中 - 设置y轴标签为'阅读分数',x轴标签为'写作分数'
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认
%matplotlib inline
,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') data['edu']=data['parental level of education'].replace(["some high school", "high school","some college", "associate's degree", "bachelor's degree", "master's degree"], [1,2,4,8,16,32]) ## 创建大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 data.plot(kind='scatter', x='writing score', y='reading score',s=data.edu) plt.ylabel('阅读分数') plt.xlabel('写作分数')
-
自定义图表样式2
【单选】在Matplotlib中的方法
matplotlib.pyplot.xticks()
作用是()答案解析:
matplotlib.pyplot.xticks()
中传入第一个参数传入数值列表,设置x轴上的标签位置,还可传入第二个列表参数,可自定义x轴的标签名称 -
自定义图表样式3
【多选】使用Pandas中的
DataFrame.plot
绘制图片,下列关于颜色设置说法正确的是?参数
colormap
可传入Matpotlib内置色图的名称,即可设置不同颜色参数
colorbar
可传入True
或者False
,设置是否画出颜色条图例正确答案:选项2,4
答案解析:参数
colormap
可传入Matpotlib内置色图的名称,即可设置不同颜色。参数colorbar
可传入True
或者False
,设置是否画出颜色条图例,仅与'scatter'和'hexbin'图相关。 -
饼图
- 依据Pandas的绘图机制,绘制一个饼图,查看父母教育水平分布情况
- 针对
parental level of education
列,将不同的教育水平统计总数并画出分布情况 - 设置为去除默认自动添加的标题和各部分的名称,并添加图例
- 设置图片标题为
父母教育水平分布饼图
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认
%matplotlib inline
,无需使用show()
函数展示图形 - 为方便结果图对比,默认将图片大小设置为
8*6
格式,请勿更改
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') ## 创建图形大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 s = data['parental level of education'].value_counts() s.plot.pie(labels=None,legend=True) plt.title('父母教育水平分布饼图')
-
自定义图表样式2
- 依据Pandas的绘图机制,绘制写作分数的折线图
- 已经将数学分数、阅读分数和写作分数按照父母教育程度聚类取平均,存入列名
df_edu_scores_sorted
中 - 设置x轴主标签刻度名称为
'A','B','C','D','E','F'
- 设置x轴显示名称顺时针倾斜30度
- 数据集已经导入,命名为
data
,类型为DataFrame - 在线编程环境已经默认
%matplotlib inline
,无需使用show()
函数展示图形
import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('StudentsPerformance.csv') df_edu_scores = data.groupby('parental level of education')[('math score', 'reading score','writing score')].mean() df_edu_scores['edulevel'] = (4,5,2,6,3,1) df_edu_scores_sorted = df_edu_scores.sort_values("edulevel") ## 创建图形大小为(8, 6)的图形,返回Figure对象fig fig = plt.figure(figsize=(8, 6)) ## 绘图 df_edu_scores_sorted['writing score'].plot(rot=-30) x_label = ['A','B','C','D','E','F'] plt.xticks([0,1,2,3,4,5],x_label)
-
饼图2
【单选】使用Pandas中的
DataFrame.plot.pie()
绘制饼图,下列是设置部分突出显示的参数是?explode
参数
explode
设置每一块饼图离开中心的距离,将比重最大的一块突出显示;参数
autopct
为添加每部分百分比数值;参数
legend
为添加图例;绘制饼图
DataFrame.plot.pie()
中没有highlight
这个参数。
第八章
-
分类数据包含类别(categories)和编码(codes)两个属性。
-
分类数据的概念
现已读入完整的马绞痛数据并存储为DataFrame对象
horse_data
,temp_of_extremities
变量取值有“cold”、“cool”、“normal”和“warm”:- 请提取
temp_of_extremities
外周循环体温存储为变量temp
- 请使用
astype
方法,将temp
变量转换为分类类型 - 请使用
Series.cat.set_categories
为temp
变量的类别设定顺序:cold < cool < normal < warm
import pandas as pd horse_data = pd.read_csv('horse.csv') #请在下方作答 #提取外周循环体温并存储为变量`temp` temp = horse_data['temp_of_extremities'] #将`temp`变量转换为分类类型 temp = temp.astype('category') #为`temp`变量的类别设定顺序 temp = temp.cat.set_categories(['cold','cool','normal','warm'],ordered=True) print(temp)
- 请提取
-
分类数据的创建
【单选】下列关于创建Pandas中的分类数据的方法中说法错误的是()
选项1
创建Series时,通过指定参数
dtype
为category
可创建分类数据。选项2
已知一个Series或DataFrame时,可通过
astype
方法直接转换为分类数据。直接使用
astype
将一个DataFrame转换为分类数据时,数值型数据不会被转换。选项4
可以通过创建
pandas.Categorical
对象创建分类数据。正确答案:选项3。
答案解析:DataFrame中的每一列都会转换成分类数据,包括数值型数据。
-
cut
现已读入完整的马绞痛数据并存储为DataFrame对象
horse_data
:- 请使用`cut`对`pulse`进行离散化创建分类数据,划分为[0,30)、[30,50)和[50,100)三个区间,并存储为变量`pulse_c`
-
分类数据的常用操作方法
【多选】现有一
grade
成绩变量,为分类类型,类别有‘A’、‘B’和‘C’三类,若想将其分别改名为‘Grade A’、‘Grade B’和‘Grade C’,可以使用()grade.cat.rename_categories({'A':'grade A','B':'grade B','C': 'grade C'})
选项2
grade.rename_categories({'A':'grade A','B':'grade B','C': 'grade C'})
grade.cat.rename_categories(['grade A','grade B', 'grade C'])
选项4
grade.rename_categories(['grade A','grade B', 'grade C'])
正确答案:选项1、3。
答案解析:对于分类数据的Series,应通过特殊属性Series.cat访问。
-
目前
eval
函数支持的有算术运算、比较运算
eval
函数目前还不支持函数调用、if条件语句、循环语句及更为复杂的运算。 -
使用
pivot_table
进行分析时,aggfunc
传入的运算方法将作用于()参数指定的列上values
values
选择的列是希望在表中展示的数值,聚合函数aggfunc
最终将应用到该值。 -
数据透视表
现已读入完整的马绞痛数据并存储为DataFrame对象
horse_data
:- 请使用
pivot_table
计算不同outcome
最终情况(行)和不同age
年龄段马(列)的pulse
心率平均数,设定添加行/列汇总值并命名为'Total',最终返回存储为out
import pandas as pd horse_data = pd.read_csv('horse.csv') #请在下方作答 out = horse_data.pivot_table(index='outcome',columns='age',values='pulse',margins=True,margins_name='Total') print(out)
- 请使用
-
Pandas提高性能的方法
下列关于
eval
和query
的说法中,正确的是()两者都依赖于Numexpr程序包,运算过程中不需要费力地配置中间数组。
选项2
eval
中无法使用Python的局部变量。选项3
pd.eval('df['Math']+df['English']')
一定比df['Math']+df['English']
要快。选项4
pd.eval('df['Math']=="A"')
和df.query('Class=="A"')
的结果相同。正确答案:选项1。
答案解析:
选项2:
eval
中可通过@符号使用Python的局部变量;选项3:运算简单或DataFrame数据量较少时不使用
eval
函数,有可能反而会慢;选项4:
query
返回的是对应数据,eval
返回布尔值。 -
数据透视表
现已读入完整的马绞痛数据并存储为DataFrame对象
horse_data
:- 请使用
pivot_table
计算不同outcome
最终情况(行)和不同age
年龄段马(列)的pulse
心率和packed_cell_volume
红细胞压积的中位数,并存储为out
import pandas as pd horse_data = pd.read_csv('horse.csv') #请在下方作答 out = horse_data.pivot_table(index='outcome',columns='age',values=['pulse','packed_cell_volume'],aggfunc='median') print(out)
- 请使用
-
分类数据的常用操作方法
现已读入完整的马绞痛数据并存储为DataFrame对象
horse_data
:- 请提取马的年龄段
age
并存储为a
变量 - 将
a
转换为分类数据,并使用cat.set_categories
设置逻辑顺序为''young" < "adult"
import pandas as pd horse_data = pd.read_csv('horse.csv') #请在下方作答 a = horse_data['age'].astype('category') a = a.cat.set_categories(['young','adult'],ordered=True) print(a)
- 请提取马的年龄段