《动手学数据分析》第一章1.4

1.4 知道你的数据叫什么

我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?
开始前导入numpy和pandas

import numpy as np
import pandas as pd

1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]

【数据分析入门】之:dataframe和series

具体区别可以看看上面的文章。
例子的话就试一个简单的:

df=pd.Series([[1,2,3],[4,5,6],[7,8,9]])
df1=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])

在这里插入图片描述
可以很明显看出区别,series只是一个一维数组,没有把数据【1,2,3】分开,而是看成一个整体,放在索引0.

而dataframe是一个二维的数据,把数据的每个值分开。

1.4.2 任务二:根据上节课的方法载入"train.csv"文件

data = pd.read_csv('train.csv')

也可以加载上一节课保存的"train_chinese.csv"文件。通过翻译版train_chinese.csv熟悉了这个数据集,然后我们对trian.csv来进行操作

1.4.3 任务三:查看DataFrame数据的每列的名称

#写入代码
data.columns
#结果
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]

DataFrame筛选出指定列值的行

Python笔记:df.loc[]和df.iloc[]的区别

上面博客介绍了提取指定列的方法,学习到了两个函数
df.loc和df.iloc
– loc利用index的名称,来获取想要的行(或列)。
– iloc利用index的具体位置(所以它只能是整数型参数),来获取想要的行(或列)。
感觉loc是具体提取df对象里面的某个值(需要满足行,列,两个条件)
可以用来提取指定行的指定列。
那么实现任务的方法代码是:

data['Cabin']
data.loc[:,'Cabin']	
data.iloc[:,10]#Cabin是在第11个标签,索引值为10

1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

在这里插入图片描述
导入test_1.csv的行标签,对比train.csv的行标签,发现是多了一个a列。
使用drop函数删除列。

Pandas:删除行、列—DataFram.drop()

【思考】还有其他的删除多余的列的方式吗?
答:观察到a列是在最后一列,我们可以使用loc函数,取前14列的数值。

# 思考回答
test.iloc[:,:13].columns

1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

#写入代码
df = data.drop(labels=['PassengerId','Name','Age','Ticket'],axis=1)

【思考】对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?

【思考回答】这题目的应该是告诉我们,drop函数如果inpace没有设置为1的话,实际上drop函数只是另外新建了个dataframe。如果设置为1,则是在原来的dataframe上修改。

别的方法隐藏列元素的话,想法是读取csv的时候,设置列元素columns的具体列名。

如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用

答案:

# 删除多余的列
del test_1['a']
test_1.head(3)

del这个真的没用过,学到了!!!

1.5 筛选的逻辑

4、pandas的数据筛选之isin和str.contains函数
筛选可以看这篇博客,挺齐全的。

1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

#写入代码
data[data['Age']<10]

1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

先给个错误示范:

#写入代码
data[10<data['Age']<50]

在这里插入图片描述
一开始我想当然的就写成10<x<50,但直接报错了,后来看见
在这里插入图片描述
原来使用dataframe是需要多种条件结合。于是改为

#写入代码
data[(data['Age']>10)&(data['Age']<50)]

在这里插入图片描述
【提示】了解pandas的条件筛选方式以及如何使用交集和并集操作

1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

提取具体某行数据,思路是使用loc函数。

错误示范;TypeError: call() takes from 1 to 2 positional arguments but 3 were given
在这里插入图片描述
为啥会报这个错呢,哎,还是小白问题,因为loc函数是使用筛选功能是用【】中括号,而不是小括号。
正确示范:

#写入代码
midage.loc[99,['Pclass','Sex']]
#结果
Pclass       2
Sex       male
Name: 99, dtype: object

【提示】在抽取数据中,我们希望数据的相对顺序保持不变,用什么函数可以达到这个效果呢?

1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

任务四和任务五做完后发现一个奇怪的错误。
在这里插入图片描述
在这里插入图片描述
使用loc函数和iloc函数,输出的数据是不一样的。
后来思考发现原因,是因为loc函数是使用的名称索引,它索引出了对应名称为100,105,108行的数据。
但iloc是索引的行数据索引值,所以iloc索引出来的对应实际行的100,105,108行。
对比了答案,发现答案里面有个操作。
在这里插入图片描述
答案里面有这部操作:

midage = midage.reset_index(drop=True)
midage.head(3)

所以reset_index函数有什么作用呢?
(Python)Pandas reset_index()用法总结
作用是重置索引,并抛弃旧索引。这样的话就会使得所有的索引重新按顺序排列。

在这里插入图片描述
在这里插入图片描述

我们可以对比一下使用了reset_index函数之后的midage和使用之前的midage区别。就是索引值变了。
后面使用loc和iloc函数就输出一样的结果了。
在这里插入图片描述
所以说,在使用条件筛选后,记得要用reset_index()函数进行重置索引。
loc是使用名称进行索引
iloc是使用索引值进行索引。
在筛选条件后,名称和索引值会发生变化,不再一一对应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值