DataWhale 9月组队学习-动手学数据分析 task1_学习记录

导入文件

首先是导入此次需要用到的两个包

import numpy as np

import pandas as pd

导入之前需要下载包

!pip install numpy
!pip install pandas

下载的很顺利,不顺利的可以考虑换个源,在代码后面补上-i 和 源的地址。

接着是文件的读取,本次读取的文件格式是csv,所以用pandas库中的read_csv()函数来读取

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

上面的train.csv文件是与代码文件在同一父文件夹下的,可以直接用该相对路径来找到对应文件,如果需要读取的文件通过相对路径来索引太复杂,可以通过绝对路径来读取,下面是在我的电脑中读取文件的绝对路径:

df = pd.read_csv('D:/Young Cat/DataWhale/hands-on-data-analysis-master/第一单元项目集合/train.csv')

通过read_csv()函数,将文件里的内容读取到变量df之中

在这里插入图片描述

可以看到该文件中有891个乘客信息,每行有12个该乘客的个人相关信息

但是生活中并不是所有的数据都是这么小的,如果是对于以亿为单位的行数的话,一次性处理这么多的数据对个人的电脑来说是有点不现实的,所以我们可以将文件分成几分来读取,例如将每100行分为一个数据模块,进行逐块读取,那么代码就是这样的:

chunker = pd.read_csv('train.csv', chunksize=100)

通过输出chunker的类型,可以知道这样分块读取得到的数据类型是’pandas.io.parsers.TextFileReader’

>>>print(type(chunker))
<class 'pandas.io.parsers.TextFileReader'>

该类型是可迭代的,可以通过for循环进行输出

for i in chunker:
    print(i)

输出的结果是类似于第一次输出的结果的,只不过不是一次性将891行输出,而是先将0-99行输出,再对100-199行进行输出,以此类推。(vscode 展示效果不太好)这样子看上去分块读取有点多此一举,但是对于庞大的数据来说,对数据进行筛选以及清洗时,会有很大的帮助。

观察数据

df.head()   //默认展示前5行,括号内输入相应的数字即显示对应的行数量

在这里插入图片描述

df.tail()   //默认展示后5行,括号内输入相应的数字即显示对应的行数量

在这里插入图片描述

df.info()   //观察数据的总体信息

在这里插入图片描述

数据操作

经过上面导入文件可以看到,泰坦尼克号乘客信息的CSV文件像是Excel文件,有很多行很多列,如果对这些数据进行一些操作的话,一般用Pandas库里的Dataframe读取数据。

Series 和 Dataframe
  • Series:我个人理解为类似numpy里边的一维array,是一个一维数组对象,但是有索引。
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
#输出结果
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64

如果不自己设置索引,Series也会自动从0设置索引

sdata = [35000,  71000, 16000,  5000]
example_1 = pd.Series(sdata)
example_1
#输出结果
0    35000
1    71000
2    16000
3     5000
dtype: int64
  • DataFrame:多维数组,行有索引,列有列名。
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2
#输出结果
	state	year	pop
0	Ohio	2000	1.5
1	Ohio	2001	1.7
2	Ohio	2002	3.6
3	Nevada	2001	2.4
4	Nevada	2002	2.9
5	Nevada	2003	3.2
查看DataFrame数据的每列的名称
df.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp','Parch', 'Ticket', 'Fare',                 'Cabin', 'Embarked'],dtype='object')

查看指定列的方法

#查看所有的乘客的名字
#方法一
df["Name"]

在这里插入图片描述

#方法二
df.Name

在这里插入图片描述

两种方法都可以得到所有乘客的名字

删除指定列

drop

DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

参数含义:

  • label:要删除的行和列,以列表形式给出
  • axis:默认值为0,指需要删除的是列,删除列时需传入0
  • index:直接指定要删除的行,删除多行可以使用列表作为参数
  • columns:直接指定要删除的列,删除多行可以使用列表作为参数
  • inplace:默认值为False,指不在原数据上进行操作;如果为True,则在原数据操作

用drop删除列(行)的两种方式:

  • 通过参数label和axis指定
  • 通过参数columns(index)指定
#初始数据
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2
#运行结果
	state	year	pop
0	Ohio	2000	1.5
1	Ohio	2001	1.7
2	Ohio	2002	3.6
3	Nevada	2001	2.4
4	Nevada	2002	2.9
5	Nevada	2003	3.2

通过参数label和axis指定

#列
a = example_2.drop(labels=['year'],axis=1)
a
#运行结果
	state	pop
0	Ohio	1.5
1	Ohio	1.7
2	Ohio	3.6
3	Nevada	2.4
4	Nevada	2.9
5	Nevada	3.2
#行
b = example_2.drop(labels=[1,2],axis=0)
b
#运行结果
state	year	pop
0	Ohio	2000	1.5
3	Nevada	2001	2.4
4	Nevada	2002	2.9
5	Nevada	2003	3.2

接下来是通过参数columns(index)指定

#列
a = example_2.drop(columns=['pop'])
a
#运行结果
	state	year
0	Ohio	2000
1	Ohio	2001
2	Ohio	2002
3	Nevada	2001
4	Nevada	2002
5	Nevada	2003
#行
b = example_2.drop(index=[3,5])
b
#运行结果
	state	year	pop
0	Ohio	2000	1.5
1	Ohio	2001	1.7
2	Ohio	2002	3.6
4	Nevada	2002	2.9

ok啦!这些就是drop简单的用法啦!因为drop可以选择不在原数据上进行操作,所以我们可以通过drop实现对指定列的隐藏,以此来观测需要重点观测的数据

除了drop方法,下面还有del方法。

del

相对于drop,del方法一次性只能删除一列,比较不方便。正是drop可以同时删除多列,所以传入的几个参数的数据类型都是列表

  • 用法
del example_2['state']
example_2
#运行结果
	year	pop
0	2000	1.5
1	2001	1.7
2	2002	3.6
3	2001	2.4
4	2002	2.9
5	2003	3.2

筛选数据

通常我们需要从数据里挑选出符合一定条件的来观测,例如我们需要从这些乘客里查看年龄小于10岁的人有哪些,我首先想到的处理方式是这样的:

df["Age"]<10

然而很遗憾,python再强大再好用也不能理解我的意思,这样子表达并不会返回我想要的结果,而且会报错!但这样子做并不是无意义的,先来看看这返回的是什么:

print(df["Age"]<10)

在这里插入图片描述

可以看到这里返回了891个bool类型的数据,不清楚整体是不是一个列表,但我认为应该是列表,把这些列表传入原数据中,为True的行则显示,为False的行则不显示:

df[df["Age"]<10]

在这里插入图片描述

可以看到,这里的满足指定条件的数据都显示出来了

如果有多个判定条件,只需要通过与或运算操作即可(但是列表和元组好像不能进行与或操作…所以传入的可能就不是列表了…但是道理大家懂就好了嘿嘿)

midage = df[(df["Age"]>10)& (df["Age"]<50)]
midage

在这里插入图片描述

因为我们提取的是原数据里的一部分数据,前面的行索引并不是完整的,例如上图,总共有576行,但是最后一行的索引是890,显然正常的数据最后的行索引应该是575(从0开始),为了避免后续操作引起不必要的麻烦,我们可以将这部分数据重新建立属于它们自己的索引。

midage = midage.reset_index(drop=True)
midage

在这里插入图片描述

通过reset_index()可以还原索引,变为默认的整型索引,如果原索引是乘客的名字,则也会转变为默认的整型索引。drop=True的作用把原来的索引丢弃或者转化为对应列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值