第三章索引
员工数据集
巧克力数据集
- 把列索引名中的
\n
替换为空格。 - 巧克力
Rating
评分为1至5,每0.25分一档,请选出2.75分及以下且可可含量Cocoa Percent
高于中位数的样本。 - 将
Review Date
和Company 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)