花哨索引

花哨索引
花哨索引

 x = np.array([[1,2],[3,4]])
 >>x
 array([[1, 2],
       [3, 4]])
 y = np.array([[1],[0]])
 >>y
 array([[1],
       [0]])
>>x[y]
array([[[3, 4]],

       [[1, 2]]])

 理解x[y]就是array([[x[1],
                   x[0]]])


 x = np.mat([[1,2],[3,4]])
 >>x
 matrix([[1, 2],
       [3, 4]])
 y = np.mat([[1],[0]])
 >>y
 matrix([[1],
       [0]])
>>x[y]
matrix([[[3, 4]],

       [[1, 2]]])


任务描述 本关任务:通过相关知识介绍的取值方法,得到目标DataFrame对象,具体要求请查看编程要求。 相关知识 将DataFrame看作字典 DataFrame可以看作一个由若干Series对象构成的字典,可以通过对列名进行字典形式的取值获取数据。 In: area = pd.Series({'California': 423967, 'Texas': 695662, 'New York': 141297, 'Florida': 170312, 'Illinois': 149995}) In: pop = pd.Series({'California': 38332521, 'Texas': 26448193, 'New York': 19651127, 'Florida': 19552860, 'Illinois': 12882135}) In: data = pd.DataFrame({'area':area, 'pop':pop}) In: data["area"] # data.area 这种属性形式也可以获取到相同的结果 Out: California 423967 Florida 170312 Illinois 149995 New York 141297 Texas 695662 Name: area, dtype: int64 虽然属性形式的数据选择方法很方便,但是它并不是通用的。如果列名不是纯字符串,或者列名与DataFrame的方法同名,那么就不能用属性索引。例如,DataFrame有一个pop()方法,如果用data.pop就不会获取'pop'列,而是显示为方法。 In: data.pop is data['pop'] Out: False 所以,尽量避免用属性形式选择的列直接赋值,即避免data.pop=z这种方式赋值。 和Series对象一样,可以用字典形式的语法调整对象,例如增加一列数据。 In: data["density"] = data['pop']/data['area'] In: data Out: area pop density California 423967 38332521 90.413926 Florida 170312 19552860 114.806121 Illinois 149995 12882135 85.883763 New York 141297 19651127 139.076746 Texas 695662 26448193 38.018740 将DataFrame看作二维数组 DataFrame可以看成是一个增强版的二维数组,许多数组操作方式都可以用在DataFrame对象上,例如,用values属性按行查看数组数据,对DataFrame进行转置等等。 In: data.values Out: array( [[ 4.23967000e+05, 3.83325210e+07, 9.04139261e+01], [ 1.70312000e+05, 1.95528600e+07, 1.14806121e+02], [ 1.49995000e+05, 1.28821350e+07, 8.58837628e+01], [ 1.41297000e+05, 1.96511270e+07, 1.39076746e+02], [ 6.95662000e+05, 2.64481930e+07, 3.80187404e+01]]) In: data.T Out: 将DataFrame看作数组时,我们可以是使用单个行索引获取一行数据。 In: data.values[0] #取一行数据 Out: array([ 4.23967000e+05, 3.83325210e+07, 9.04139261e+01]) 而获取一列数据就需要向DataFrame传递单个列索引,与字典形式的操作相同,都是用data["列名"]获取。 因此,在进行数组形式的取值时,我们就需要用另一种方法——前面介绍过的Pandas索引器loc、iloc和ix了。通过iloc索引器,我们就可以像对待NumPy数组一样索引Pandas的底层数组(Python的隐式索引),DataFrame的行列标签会自动保留在结果中。 In: data.iloc[1:3, :2] # 隐式 Out: area pop Florida 170312 19552860 Illinois 149995 12882135 In: data.loc[:'Illinois', :'pop'] #显式 Out: area pop California 423967 38332521 Florida 170312 19552860 Illinois 149995 12882135 任何用于处理NumPy形式数据的方法都可以用于这些索引器,例如在loc索引器中结合使用掩码与花哨索引方法。 In: data.loc[data.density > 100, ['pop', 'density']] Out: pop density Florida 19552860 114.806121 New York 19651127 139.076746 其他取值方法 还有一些取值方法和前面介绍过的方法不太一样,但是在实际应用中非常实用。 data["列名"] data["A列":"B列"] data[0:3] # 取第一到第四行 data[data.density > 100] #取density列值大于100的行 编程要求 本关的编程任务是补全右侧上部代码编辑区内的相应代码,要求实现如下功能: 完成下列要求。初始DataFrame如图所示: 根据相关知识介绍的取值方法将初始DataFrame转换成下图所示DataFrame,并输出: Florida Washington deaths 616 62 battles 2 3 size 1400 849 veterans 26 48 readiness 3 3 armored 1 1 deserters 2 31 具体要求请参见后续测试样例。 请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作! 测试说明 平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。 测试输入: 无测试输入 预期输出: Florida Washington deaths 616 62 battles 2 3 size 1400 849 veterans 26 48 readiness 3 3 armored 1 1 deserters 2 31
最新发布
05-29
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值