数据酷客_Pandas数据分析_练习

数据分析

第一章

  1. 【单选】下面的代码输出是?

    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轴求和。这里只有一个维度,所有-10求和结果相同,即1+2+3+4=10

  2. 向量

    • 请使用linspace函数创建一个初始值为0,终止值为100(不包含终止值),元素个数为70的一维数组

    • 将结果保存在变量a

    import numpy as np
    #请在下方作答
    a = np.linspace(0, 100, 70, endpoint=False)
    print(a)
    
  3. 数组

    • 现已知一个5行6列的ndarray数组a

    • 请利用NumPy中的函数将数组a展平为一维数组,将结果保存在ndarray对象b

    import numpy as np
    #请在下方作答
    b = a.ravel()
    print(b)
    
  4. 现已知一个ndarray数组a,选取NumPy中适当的ufunc函数完成以下操作:

    • 请将数组a中的每一个元素进行向上取整,存储为变量b

    • 请选出b中的最小值,存储为变量c

      import numpy as np
      #请在下方作答
      b = np.ceil(a)
      c = np.min(b)
      print(b)
      print(c)
      
  5. 生成等差数列

    • 请使用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)
    
  6. 生成等比数列

    • 请使用NumPy中的函数生成从1开始到512结束(包含结束点),公比为2的等比数列,将结果保存在一维ndarray对象a

    • 调用ndarray类中的方法将a变为2行5列的数组,保存在二维ndarray对象a_trans

  7. 数列索引

    【多选】 已知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。

  8. 一维数组切片

    【多选】 已知长度为10的一维ndarray数组data,提取出最后3个元素,下列操作可行的是?

    选项1

    data[7:10]
    

    选项2

    data[7:]
    

    选项3

    data[-3:]
    

    选项4

    data[[-3, -2, -1]]
    

    答案1、2、3、4

  9. 逻辑索引

    【单选】 已知二维ndarray数组data,从中提取出小于2或大于3的元素,下列操作可行的是?

    选项4

    data[(data<2) | (data>3)]
    

    正确答案:选项4。逻辑运算符and、or在布尔数组中无效。

  10. 结构数组

    根据下列表格利用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)
    
  11. 展平数组

    image-20220610141100875

    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)
    
  12. reshape和resize

    image-20220610141258491

    答案解析:数组的reshape方法和resize方法均可改变数组的维度和尺寸。

  13. hstack和T

    image-20220610141427368

    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)
    
  14. vstack和vsplit

    image-20220610141605338

    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. image-20220610220208464

    正确答案:选项1和3。

    答案解析:Series是带索引的一维数组,并没有列索引

  2. image-20220610220302339

    import pandas as pd
    #请在下方作答
    d = {'数学':pd.Series([90,76],index=['张三','李四']),'语文':pd.Series([87,95],index=['张三','李四'])}
    df = pd.DataFrame(d)
    
    print(df)
    
  3. image-20220610220448122

    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)
    
  4. image-20220610220648868

    选项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,在进行逻辑判断时,应该使用==,而不是=,错误。

  5. 现已读入完整的贷款数据并存储为loan_data,数据结构为DataFrame:

    • 请选取loan_amntgradehome_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)
    
  6. image-20220610220915045

    image-20220610220940697

    正确答案:选项1,2,4。

    答案解析:.iloc[]表示通过位置索引,.loc[]表示通过标签索引,注意到题目要求的三列就是前3列,故选项1,2正确。选项3明显错误。选项4,注意在通过标签索引时,末端标签是包含的,故也正确

  7. 现已读入完整的贷款数据并存储为loan_data,数据结构为DataFrame,需要删除grade一列。

    image-20220610221127016

    正确答案:选项1,2。

    答案解析:使用.pop()del均可删除一列,选项1,2都正确

第三章

  1. 文件读取

    • 请利用Pandas中的.read_csv()方法读取数据,将结果保存在DataFrame对象baby_names
    import pandas as pd
    baby_names = pd.read_csv('UsBabyNamesRight.csv')
    print(baby_names)
    
  2. 数据展示

    • 请利用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)
    
  3. 汇总统计

    • 请利用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)
    
  4. 获取数据类型

    • 请利用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)
    
  5. 数据统计

    • 请利用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)
    
  6. 查看数据集形状

    • 请利用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)
    
  7. 数据筛选

    • 请利用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)
    
  8. 数据筛选

    • 请利用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)
    
  9. 描述性统计

    • 请利用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)
    
  10. 数据选取

    • 请利用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)
    
  11. 缺失值数量分析

    • 请利用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)
    

第四章 数据转换与融合

  1. 数据合并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)
    
  2. 数据合并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)
    
  3. 数据合并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)
    
  4. 数据合并8

    请利用Pandas中的.append()方法将df2df3添加至df1的下面,并设置参数ignore_index,不使用df2df3的索引,将结果保存为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)
    
  5. 数据合并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)
    
  6. 重命名列名

    请利用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)
    
  7. 数据融合

    现已读入这两份文件,分别存储在两个DataFrame对象account_infoloan_info中。

    • 请使用.merge()方法,将account_infoloan_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)
    
  8. 排序和随机采样

    现已读入完整的贷款数据并存储为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)
    
  9. 排序和随机采样

    现已读入完整的贷款数据并存储为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)
    
  10. 离散化和面元划分

    现已读入完整的贷款数据并存储为DataFrame对象loan_data:

    • 请利用.sample()方法随机采样30个样本,保存为DataFrame对象loan_data_new,随机种子设置为111
    • 请利用.fillna()方法对loan_data_newannual_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())
    
  11. 离散化和面元划分

    正确答案:选项2。

    答案解析:pd.qcut()是等频离散化的函数,而pd.cut()是根据距离离散化的函数,选项1,3使用pd.cut()错误。pd.qcut()需传入待离散化的Series和希望划分的面元数量,故选项4错误。

  12. 数据转换之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对象,原数据则不会修改

  13. 数据转换之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,则原数据不会产生修改

  14. 数据转换之哑变量编码

    image-20220610234139062

    image-20220610234152046

    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错误。

  15. 数据融合

    现已读入这两份文件,分别存储在两个DataFrame对象account_infoloan_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',不符合题目要求

  16. 数据转换之文本数据规整

    现已读入完整的贷款数据并存储为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)
    
  17. 数据转换之哑变量编码

    现已读入完整的贷款数据并存储为DataFrame对象loan_data,下列选项中,能对gradehome_ownership两列进行哑变量编码,将第一个编码特征丢掉,并替换原来的gradehome_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没有按题目要求增加前缀,错误。

  18. 数据转换之文本数据规整

    现已读入完整的贷款数据并存储为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列中形式均为字母+一位数字,匹配不到相关对象,无法产生替换,错误。

第五章

  1. groupby() agg()

    • 请利用Pandas中的.groupby()方法按ChestPainSex性别进行分组,顺序为先ChestPainSex
    • 对分组后的数据,提取AgeRestBP两列,并依次输出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)
    
  2. 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)
    
  3. 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)
    
  4. size()

    • 请利用Pandas中的.groupby()方法按照ChestPainSex进行分组,顺序为先ChestPainSex,并利用Pandas中的.size()方法计算每组的样本数
    • 请将最终的结果保存为Series对象result
    • 数据集已经导入,命名为heart,类型为DataFrame
    import pandas as pd
    heart = pd.read_csv('Heart.csv')
    # 请在下方作答
    result = heart.groupby(['ChestPain','Sex']).size()
    
    print(result)
    
  5. 聚合函数

    【单选】现有一份已保存为DataFrame对象的成绩单数据df,数据中包含每位同学的class班级信息、sex性别信息、math数学成绩信息和english英语成绩信息。下列选项中,可以将数据按班级和性别分组后提取mathenglish两列,并对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()方法传入一个字典,字典的键-值对为列-该列的聚合函数。

  6. GroupBy技术

    【单选】现有一份已保存为DataFrame对象的成绩单数据df,数据中包含每位同学的class班级信息、sex性别信息、math数学成绩信息、english英语成绩信息、chemistry化学成绩信息。下列选项中,可以将数据按照班级和性别分组,并只选择mathenglish成绩两列,且采用均值聚合的是()

    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()

  7. 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')效果相同。

  8. 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为每个数据减去对应列的最大值,显然错误,其它三个选项都是可以的。

  9. 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进行沿横向轴分组求平均值。

第六章 时间

  1. 时间差

    两个datetime对象之间的时间差为timedelta类型。

  2. 字符串转日期

    【多选】要将字符串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用于将日期转换为字符串。

  3. 调整日期

    现已创建一个日期变量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)
    
  4. 日期转字符串

    现已创建一个数据类型为datetime的日期变量stamp

    • 请将该日期转换为字符串,其格式设置为:“2位数的年-2位数的月-2位数的日”,如“18-01-01”,结果存储为result变量
    from datetime import datetime
    #请在下方作答
    result = stamp.strftime('%y-%m-%d')
    
    print(result)
    
  5. 日期和时间数据

    现已创建一个字符串变量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)
    
  6. 日期的范围、频率及移动

    【单选】以下代码生成的日期范围是()

    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’左开右闭

  7. 日期的范围、频率及移动

    【单选】现已知一个Pandas时间序列对象ts,下列代码能够实现索引不变数据前移5位的是()

    选项1

    ts.shift(freq=5)
    

    选项2

    ts.shift(freq=-5)
    

    选项3

    ts.shift(5)
    
    ts.shift(-5)
    

    正确答案:选项4。

    答案解析:freq参数传入的应是基础频率;选项3实现索引不变数据后移5位

第七章 数据可视化

  1. 散点图

    使用Pandas进行数据可视化,利用DataFrame对象data中的ab列来绘制散点图,则下列代码片段正确的是( )

    data.plot(kind='scatter',x='a',y='b')
    

    正确答案:选项3。

    答案解析:kind参数设置为:pie(饼图),barh(条形图),bar(柱形图),scatter(散点图),hist(直方图),必须要指定横轴和纵轴。

  2. 六边箱图

    【多选】使用Pandas中的DataFrame.plot.hexbin()绘制六边箱图,下列说法正确的是

    六边箱图又名高密度散点图,如果数据点太密集,六边箱图效果比散点图更好;

    参数gridsize设置x轴方向的六边型数量,默认为100。

  3. 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)
    
  4. 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)
    
  5. 折线图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)
    
  6. 折线图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='--')
    
  7. 折线图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)
    
  8. 条形图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)
    
  9. 条形图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('父母教育水平分布')
    
  10. 条形图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('各科平均分')
    
  11. 直方图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('频数')
    
  12. 直方图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))
    
  13. 箱线图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('分数')
    
  14. 箱线图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('分数')
    
  15. 气泡图

    • 依据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('写作分数')
    
  16. 自定义图表样式2

    【单选】在Matplotlib中的方法matplotlib.pyplot.xticks()作用是()

    答案解析:matplotlib.pyplot.xticks()中传入第一个参数传入数值列表,设置x轴上的标签位置,还可传入第二个列表参数,可自定义x轴的标签名称

  17. 自定义图表样式3

    【多选】使用Pandas中的DataFrame.plot绘制图片,下列关于颜色设置说法正确的是?

    参数colormap可传入Matpotlib内置色图的名称,即可设置不同颜色

    参数colorbar可传入True或者False,设置是否画出颜色条图例

    正确答案:选项2,4

    答案解析:参数colormap可传入Matpotlib内置色图的名称,即可设置不同颜色。参数colorbar可传入True或者False,设置是否画出颜色条图例,仅与'scatter'和'hexbin'图相关。

  18. 饼图

    • 依据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('父母教育水平分布饼图')
    
  19. 自定义图表样式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)
    
  20. 饼图2

    【单选】使用Pandas中的DataFrame.plot.pie()绘制饼图,下列是设置部分突出显示的参数是?

    explode

    参数explode设置每一块饼图离开中心的距离,将比重最大的一块突出显示;

    参数autopct为添加每部分百分比数值;

    参数legend为添加图例;

    绘制饼图DataFrame.plot.pie()中没有highlight这个参数。

第八章

  1. 分类数据包含类别(categories)和编码(codes)两个属性。

  2. 分类数据的概念

    现已读入完整的马绞痛数据并存储为DataFrame对象horse_datatemp_of_extremities变量取值有“cold”、“cool”、“normal”和“warm”:

    • 请提取temp_of_extremities外周循环体温存储为变量temp
    • 请使用astype方法,将temp变量转换为分类类型
    • 请使用Series.cat.set_categoriestemp变量的类别设定顺序: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)
    
  3. 分类数据的创建

    【单选】下列关于创建Pandas中的分类数据的方法中说法错误的是()

    选项1

    创建Series时,通过指定参数dtypecategory可创建分类数据。

    选项2

    已知一个Series或DataFrame时,可通过astype方法直接转换为分类数据。

    直接使用astype将一个DataFrame转换为分类数据时,数值型数据不会被转换。

    选项4

    可以通过创建pandas.Categorical对象创建分类数据。

    正确答案:选项3。

    答案解析:DataFrame中的每一列都会转换成分类数据,包括数值型数据。

  4. cut

    现已读入完整的马绞痛数据并存储为DataFrame对象horse_data

    - 请使用`cut`对`pulse`进行离散化创建分类数据,划分为[0,30)、[30,50)和[50,100)三个区间,并存储为变量`pulse_c`
    
  5. 分类数据的常用操作方法

    【多选】现有一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访问。

  6. 目前eval函数支持的有

    算术运算、比较运算

    eval函数目前还不支持函数调用、if条件语句、循环语句及更为复杂的运算。

  7. 使用pivot_table进行分析时,aggfunc传入的运算方法将作用于()参数指定的列上

    values

    values选择的列是希望在表中展示的数值,聚合函数aggfunc最终将应用到该值。

  8. 数据透视表

    现已读入完整的马绞痛数据并存储为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)
    
  9. Pandas提高性能的方法

    下列关于evalquery的说法中,正确的是()

    两者都依赖于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返回布尔值。

  10. 数据透视表

    现已读入完整的马绞痛数据并存储为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)
    
  11. 分类数据的常用操作方法

    现已读入完整的马绞痛数据并存储为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)    
    

posted @ 2022-06-15 23:00  YuChun_9293  阅读(330)  评论(0编辑  收藏  举报