pandas

第三章索引

员工数据集

巧克力数据集

在这里插入图片描述

  1. 把列索引名中的\n替换为空格。
  2. 巧克力Rating评分为1至5,每0.25分一档,请选出2.75分及以下且可可含量Cocoa Percent高于中位数的样本。
  3. Review DateCompany Location设为索引后,选出Review Date在2012年之后且Company Location不属于France, Canada, Amsterdam, Belgium的样本。

1.用join,以前用过啊!我忘得干干净净,好无语

join()函数 用特定的字符或者符号来分隔一串元素
语法: ’ A ’ . join ( B )
参数说明
A:分隔符。可以为空或者空格甚至是数字
B:要连接的元素序列、字符串、元组、字典
上面的语法即:以 A 作为分隔符,将 B 所有的元素合并成一个新的字符串
返回值:返回一个以分隔符 A 连接各个元素后生成的字符串

df.columns=[' '.join(i.split('\n')) for i in df.columns]

难死了难死了,,,还有.split()这个东西真厉害!

2.中位数又是什么呢!

. quantile(0.5) 分位数 .median()中位数
要百分数化成小数 py太难了 我用excel了
查看类型.dtypes
用query了

df.query('(Rating<2.75) and (`Cocoa Percent`>`Cocoa Percent`.quantile(0.5))').head()
3.好难好难IndexSlice对象

要sort_index()一下,所以用[2012:]就好了不用用>

【a】loc[idx[*,*]]
这种情况并不能进行多层分别切片,前一个*表示行的选择,后一个*表示列的选择,与单纯的loc是类似的:
【b】loc[idx[*,*],idx[*,*]]
这种情况能够分层进行切片,前一个idx指代的是行索引,后一个是列索引。
query()里面就可以直接用列名;loc[]里面可以df.Weight>X
真奇怪,乱七八糟的
想要获得某一层索引用get_level_values

df_index=df.set_index(['Review Date','Company Location'])
df_index=df_index.sort_index(level=0)
exclude = ['France', 'Canada', 'Amsterdam', 'Belgium']
~df_index.index.get_level_values(1).isin(exclude)
df_index.loc[idx[2012:,~df_index.index.get_level_values(1).isin(exclude)],:]

第四章分组

练习1 请根据上下四分位数分割,将体重分为high、normal、low三组,统计身高的均值。
又用到分位函数了!.quantile()

hight=df.Weight>df.Weight.quantile(0.75)
low=df.Weight.quantile(0.25)>=df.Weight
normal=(df.Weight.quantile(0.75)>=df.Weight) & (df.Weight>df.Weight.quantile(0.25))
#这个是一个Serise可以用a[1]
df.groupby(hight)['Weight'].mean()[1]

2.上一小节介绍了可以通过drop_duplicates得到具体的组类别,现请用groups属性完成类似的功能。

gb=df.groupby(['School'])
res= gb.groups
res.keys()

groupby是pandas的一个对象,他有方法和属性。没有括号的是属性!有括号的是方法,那keys()是什么!

  • 变换之后数据类型不一样
    标量 Series DataFrame
    聚合 变换 过滤

3.在groupby对象中,rank方法也是一个实用的变换函数,请查阅它的功能并给出一个使用的例子。

查了,不知道是在干什么,不写了。感觉这里没什么用
4.apply函数与agg函数
agg函数只能逐列处理 apply函数能跨列 多列数据同时处理

def BMI(x):
    Height = x['Height']/100
    Weight = x['Weight']
    BMI_value = Weight/Height**2
    return BMI_value.mean()
gb.apply(BMI)

汽车数据集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值