第一章:数据载入及初步观察
1.1 载入数据
1.1.1 任务一:导入numpy和pandas
import numpy as np
import pandas as pd
import os
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
os.getcwd() # 查看相对路径
data = pd.read_csv('train.csv') # csv:comma separated values;“逗号分隔值” ;读取csv文件
data.head(5) # 查看前5行
data_table = pd.read_table('train.csv') # 使用pd.read_table()读取数据;从文件、URL、文件型对象中加载带分隔符的数据默认分隔符为制表符(“\t”)
data_table.head(5) # 查看前5列
data_table = pd.read_table('train.csv',sep=',') # 这时候pd.read_table()和pd.read_csv效果一样
pd.read_csv() 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为逗号
pd.read_table() 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符“\t”
可以通过指定分隔符使他们效果一样
data_table = pd.read_table('train.csv',sep=',') # 这时候pd.read_table()和pd.read_csv效果一样
data_tcv = pd.read_csv('train.csv',sep='\t') # TSV:tab separated values;即“制表符分隔值”,
data_tcv.head(5)
#.tcv和.csv均是以纯文本形式存储的表格数据,可由表格软件导出或读入,编码方式是可以自行定义的。.tcv和pd.read_table()的格式一样。
(2) 使用绝对路径载入数据
#使用绝对路径载入数据
data = pd.read_csv('C:/Users/Lenovo/Desktop/train.csv')
data.head(5)
#1.1.3 任务三:每1000行为一个数据模块,逐块读取
chunker = pd.read_csv('train.csv',chunksize=100)
print(type(chunker)) #查看chunker的类型
#for循环chunker
for i in chunker:
print(i)
print(type(chunker))
chunker1 = pd.read_csv('train.csv',iterator=True)
print(type(chunker1)) # 查看chunker1的类型
chunker1.get_chunk(2)
【思考】什么是逐块读取?为什么要逐块读取呢?
逐块读取:将数据分成小块按块读入,得到的对象指向了多个分块对象,但并没有将实际数据先读入,而是在提取数据时才将数据提取进来。
原因:在处理很⼤的⽂件时,可将大文件拆分成小块按块读入后,这样可减少内存的存储与计算资源。数据的处理和清洗经常使用分块的方式处理,这能大大降低内存的使用量,但相比会更耗时一些。
1.1.4 任务四:将表头改成中文,索引改为乘客ID
#方法一
data.columns = ['乘客ID', '是否幸存', '乘客等级(1/2/3等舱位)', '乘客姓名', '性别', '年龄', '堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口']
data.head(5)
#方法二 data.rename
data = pd.read_csv('train.csv')
data.rename(columns={'PassengerId': '乘客ID', 'Survived': '是否幸存', 'Pclass': '乘客等级(1/2/3等舱位)', 'Name': '乘客姓名', 'Sex': '性别','Age':'年龄','SibSp':'堂兄弟/妹个数','Parch':'父母与小孩个数','Ticket':'船票信息','Fare':'票价','Cabin':'客舱','Embarked':'登船港口' }, inplace=True)
data.head(5)
#方法三读取时直接加一行
data1 = pd.read_csv('train.csv',names=['乘客ID', '是否幸存', '乘客等级(1/2/3等舱位)', '乘客姓名', '性别', '年龄', '堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口'])
data1.head(5)
#1.2 初步观察
#1.2.1 任务一:查看数据的基本信息
data.info() #查看数据的基本信息
#方法一
print(data.columns) # 查看表头
print(data.index) #查看索引
print(data.shape) #查看行列数
print(data.ndim) #查看维度
data.isnull().sum() #缺失值个数的加和
data.isna().sum() #缺失值个数的加和
#方法二
data.describe()
2.2 查看表格前几行或后几行数据
data.head(10)#查看表格前10行
data.tail(15)#查看表格后15行数据
1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
data.isnull()
#1.3 保存数据
1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
result = data.to_csv('train_chinese.csv',encoding = 'utf-8')
1.4 知道你的数据叫什么?
#例子
data1 = pd.Series([1,3,5,7,9])
data1
data2 = pd.DataFrame([[1,2,3],[2,3,4]])
data2
1.4.2 任务二:根据上节课的方法载入"train.csv"文件
data = pd.read_csv('train.csv')
data.head(5)
1.4.3 任务三:查看DataFrame数据的每列的名称
data.columns #查看DataFrame数据的每列的名称
#1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]
#方法一
data['Cabin'] #查看"Cabin"这列的所有值[有多种方法]
#方法二
data.Cabin
方法三
data.iloc[:,-2]
方法四
data.loc[:,'Cabin']
1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
data_test = pd.read_csv('test_1.csv')
data_test.head()
# 多余unnamed:0 和a列
data_test.drop(data_test.columns[-1],axis=1)
#方法二
data_test = pd.read_csv('test_1.csv')
del data_test['a']
data_test
del data_test['Unnamed: 0']
data_test
1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素
data_test.drop(['PassengerId','Name','Age','Ticket'],axis=1)
#如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了
1.5 筛选的逻辑
1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
data_test[data_test['Age']<10]
1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = data_test[(data_test['Age']>10) & (data_test['Age']<50)]
midage
1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage = midage.reset_index(drop=True) #重置索引,而且不保留原来的index
midage.head(3)
midage.loc[[100],['Pclass','Sex']]
1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]
1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]
#1、iloc的列不能用列标签;loc的列只能用列标签,不能用索引或切片,除非用全切片
#2、两者都可以表达各种情况;
#3、两者不管表达行,还是列,使用切片时,都是loc左闭右闭,iloc左闭右开
1.6 了解你的数据吗?
1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序
data3 = pd.DataFrame(np.arange(12).reshape((3, 4))) #创建一个DataFrame对象;生成一个二维数组(3*4),第一列:0,1,2,3 第二列:4,5,6,7,第三列8,9,10,11
data3.index=[5,2,3] #DataFrame对象的索引列
data3.columns=['d', 'a', 'b', 'c'] #DataFrame对象的索引行
data3.head()
#1.让行索引升序排序
data3.sort_values(by='d', ascending=True)
#2.让列索引升序排序
data3.sort_index(axis=1)
#3.让列索引降序排序
data3.sort_index(axis=1, ascending=False)
#4.让任选两列数据同时降序排序
data3.sort_values(by=['a','c'], ascending=False)
1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列
data = pd.read_csv('train.csv')
data.rename(columns={'PassengerId': '乘客ID', 'Survived': '是否幸存', 'Pclass': '乘客等级(1/2/3等舱位)', 'Name': '乘客姓名', 'Sex': '性别','Age':'年龄','SibSp':'堂兄弟/妹个数','Parch':'父母与小孩个数','Ticket':'船票信息','Fare':'票价','Cabin':'客舱','Embarked':'登船港口' }, inplace=True)
data.sort_values(by=['票价', '年龄'], ascending=False)
1.6.3 任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
columns=['a', 'b', 'c'],
index=['one', 'two', 'three'])
frame1_a
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
columns=['a', 'e', 'c'],
index=['first', 'one', 'two', 'second'])
frame1_b
#将frame_a和frame_b进行相加
frame1_a + frame1_b
1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
max(data['堂兄弟/妹个数'] + data['父母与小孩个数'])
多做几个数据的相加
min(data['堂兄弟/妹个数'] + data['父母与小孩个数'])
1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息
frame1_b.describe()
#1.6.6 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据。
data['票价'].describe()
多做几个组数据的统计。
data['年龄'].describe()
感谢Datawhale提供的平台