Pandas数据基础操作
项目源码地址:https://github.com/datawhalechina/hands-on-data-analysis
第一章 数据载入及初步观察
1.1载入数据
1.1.1库的导入
import pandas as pd
import numpy as np
import os
1.1.2读取数据
# 查看当前工作路径
os.getcwd()
pwd
#读取数据
df = pd.read_csv('train.csv')#相对路径
df = pd.read_csv('E:\\第一单元项目集合\\train.csv')#绝对路径
1.1.3逐块读取
当文件数据过大时,整个读取会造成内存运行速度降低且占据较大内存,或者你只想读取文件的一小部分,采用逐块读取,加快读取速度且减少内存消耗。chunker返回的对象是TextFileReader类型。
#逐块读取
chunker = pd.read_csv('train.csv',chunksize=1000)
#chunker类型为TextFileReader
# 遍历每个数据块
for chunk in chunker:
1.1.4修改表头
将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]
#法一
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
#法二
df.rename(columns={'PassengerId':"乘客ID",'Survived':"是否幸存",'Pclass':"乘客等级(1/2/3等舱位)",'Name':"乘客姓名",'Sex':"性别"},inplace=True)
1.2初步观察
df.info()#查看索引、数据类型和内存信息
df.dtypes#查看数据类型
df.shape#查看表结构
df.head(10)#查看表格前10
df.tail(15)#查看表格后15行
df.isna().head()#判断数据是否为空,空返回True
1.3保存数据
# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
df.to_csv('train_chinese.csv',encoding = 'utf-8')
1.4Pandas基本的数据类型
1.4.1Series
# Series的建立
s = pd.Series([1,2,3,'a'])
1.4.2DataFrame
# DataFrame的建立
data = {'a':['a',1,-11,'21'],'b':['1',32,'q',0.01]}
df = pd.DataFrame(data)
# 数据载入
df_train = pd.read_csv('train.csv')
1.4.3查看DataFrame每列名称
df_train.columns
1.4.4查看某一列的值
#查看Cabin列的所有值
df_train['Cabin']
# df_train.Cabin
1.4.5列的删除
# 加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
df_test = pd.read_csv('test_1.csv')
df_test.head(3)
#删除多余的列a
del df_test['a']
删除数据时,del与drop不同:DataFrame.drop方法仅将指定的列或行隐藏,而显示其他数据;若想完全删除指定的数据,需设置inplace=True
# 将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素
df_tmp = df_train.drop(['PassengerId','Name','Age','Ticket'],axis = 1)
df_tmp.head(3)
1.5筛选
1.5.1单条件筛选
#"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
df_train[df_train['Age']<10].head(3)
1.5.2多条件筛选
#以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = df_train[(df_train['Age']>10)&(df_train['Age']<50)].reset_index(drop=True)
midage.head(3)
reset_index重置数据帧的索引,并使用默认索引。保证midage对象索引连续。
1.5.3loc与iloc方法
#将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage.loc[[100],['Pclass','Sex']]
#用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]
#使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]
1.6了解数据
#载入之前保存的train_chinese.csv数据,关于泰坦尼克号的任务,我们就使用这个数据
df_train=pd.read_csv('train_chinese.csv')
df_train.head(3)
1.6.1排序
df = pd.DataFrame(data=np.arange(8).reshape((2, 4)),index=[2,1],columns=['d', 'a', 'b', 'c']) #创建一个DataFrame对象
# np.arange(8).reshape((2, 4)) :生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7
1.让行索引升序排序
df.sort_index()
2.让列索引升序排序
df.sort_index(axis=1)
3.让列索引降序排序
df.sort_index(axis=1,ascending = False)
4.对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)
df_train.sort_values(['票价','年龄'],ascending=False).head(3)
【思考】排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系
1.6.2DataFrame数据相加
两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
# 计算出在船上最大的家族有多少人
max(df_train['兄弟姐妹个数'] + df_train['父母子女个数'])
1.6.3查看数据基本统计信息
describe()
# 看看泰坦尼克号数据集中票价、父母子女这列数据的基本统计数据
df_train['票价'].describe()
统计 | – |
---|---|
count | 样本数据大小 |
mean | 样本数据的平均值 |
std | 样本数据的标准差 |
mean | 样本数据的最小值 |
25% | 样本数据25%的时候的值 |
50% | 样本数据50%的时候的值 |
75% | 样本数据75%的时候的值 |
max | 样本数据的最大值 |