Pandas打卡第三次任务

第三章 索引

一、索引器

1.表的列索引

df=pd.read_csv('data/learn_pandas.csv',usecols=['School','Grade','Name','Gender','Weight','Transfer'])
df['Name'].head()

解释:
1. usecols是什么意思:
pd.read_csv中的usecols函数实现读取指定列
2.df[‘Name’].head()
df[‘name’] #得到的是不包含列索引的Series结构
df[[‘name’]] #得到是包含列索引的DataFrame结构
df.name #得到是不包含列索引的Series结构

输出的地方

df=pd.read_csv('data/learn_pandas.csv',usecols=['School','Grade','Name','Gender','Weight','Transfer'])
df['School'].head()
#输出:
0    Shanghai Jiao Tong University
1                Peking University
2    Shanghai Jiao Tong University
3                 Fudan University
4                 Fudan University
Name: School, dtype: object

函数dtype( )
作用:结构化数组类型并加以使用
语法:numpy.dtype(object, align, copy)
参数 含义
Object 被转换为数据类型的对象。
Align 如果为true,则向字段添加间隔,使其类似 C 的结构体。
Copy 是否生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。

2.序列的行索引

取出两个索引之间的元素,并且这两个索引是在整个索引中唯一出现,则可以使用切片,同时需要注意切片会包含两个端点:
例子是:

s=pd.Series([1,2,3,4,5,6],index=['a','b','a','a','a','c'])
s['c':'b':-2]

输出是:

c    2
a    4
b    6
dtype: int64

!!!-2的作用:

s=pd.Series([1,2,3,4,5,6],index=['a','c','a','a','a','b'])
s['c':'b':2]

输出是:

#输出
c    2
a    4
b    6
dtype: int64

如果读取的两个索引的顺序和命令的索引顺序是一样的那么是正2,如果顺序相反则需要-2

!!!如果改为1是什么样子

#输出
运行耗时: 7毫秒
c    2
a    3
a    4
a    5
b    6
dtype: int64

!!!如果改为3呢

#输出
c    2
a    5
dtype: int64

如果是1那么读取的是从端点开始+1的所有元素;是2则读取从端点开始+2的所有元素,并且下一个元素也是+2;是3则读取从端点开始+3的元素,因为在读取下一个+3位置的元素已经超出端点了所以没有下一个输出。

3.loc索引器

对DataFrame的行进行选取,其中基于元素的是loc索引器,基于位置的是iloc索引器
看了一遍感觉理解了;
BUT!!!
练一练部分不能做出来:

df_demo.loc[df_demo.Grade.isin(['Freshman','Senior'])]
df_demo.loc[df_demo..select_dtypes(['Freshman','Senior'])].head()
df_demo.select_dtypes(df_demo.loc['Freshman','Senior']).head()

最后百度我的代码,感觉是对的

df_demo.select_dtypes(include=['bool']).head()

lambda:
Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

4.iloc索引器

使用的话与loc类似,区别在于iloc是针对位置进行筛选的

5.query方法

支持把字符串形式的查询表达式传入query方法查询数据,表达式的执行结果必须返回布尔列表

6.随机抽样

sample函数可以对样本或特征进行随机抽样

二、多级索引

三、索引的常用方法

2.索引属性的修改

练一练:

#df_ex.rename_axis(("Change_Col", axis="columns"))

有问题!!!
样例代码也不好使!!!

3.索引的设置与重置

发现set_index如果没有设置append,则默认为false;

练习题

第一题:
1.query选出的是空

df.query('((age<=40)&''(job_title=="Dairy")&''(gender=="M")|''(job_title=="Bakery")&''(age<=40)&''(gender=="M"))')

loc运行出错

condition_1_1 = df_demo.job_title == 'Dairy'

condition_1_2 = df_demo.gender == 'M'

condition_1_3 = df_demo.age <= 40

condition_1 = condition_1_1 & condition_1_2 & condition_1_3

condition_2_1 = df_demo.job_title == 'Bakery'

condition_2 = condition_2_1 & condition_1_2 & condition_1_3

df_demo.loc[condition_1 | condition_2]

查看参考答案之后更正答案:

df.query("((age<=40)&(department=='Dairy')&(gender=='M'))|((department=='Bakery')&(age<=40)&(gender=='M'))").head()

loc部分不是很懂,找不到自己答案的错误

看了答案,容易理解

df.iloc[(df.EmployeeID%2==1).values,[0,2,-2]].head()

其中列数通过0,2,-2分别表示第一列,第三列,倒数第二列

练习题第二题

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

理解了答案,
join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

抄了答案,但是不明白错误,还在查

df = pd.read_csv('data/chocolate.csv')
df['Cocoa Percent'] = df['Cocoa Percent'].apply(lambda x:float(x[:-1])/100)
df.query('(Rating<3)&(`Cocoa Percent` > `Cocoa Percent`.median())').head(3)

菜鸡加油!

上一篇:在这个情节


下一篇:pandas索引(2)多层索引