Summary of learning data analysis(一)
Problem 1:如何解决read_csv()和read_table()两函数读取csv格式文件造成的差异?
solution 1:首先需要了解csv格式文件的特点:csv(Comma-Separated Values)文件是一种逗号分隔值的文件,而read_csv()函数读取以’,‘分割的文件到dataframe(以下简称df),read_table()函数读取以’/t’(即tab)分割的文件到df,两个函数的主要差别在于分隔符默认值不同,即sep参数设置的不同,因此要想使两个函数读取csv格式的文件到df的格式相同,就需要重新设置sep参数,对于read_table()函数而言,使用如下方法读取csv文件:
df = pd.read_table("",sep=',')
Problem 2:为何要利用pandas进行逐块读取文件,又如何进行逐块读取文件?
solution 2:
采用逐块读取文件主要目的是防止文件过大,若一次性加载到内存,可能会导致内存不足。
逐块读取文件的原理:通过设置chunksize(块大小)参数进行逐块加载。事实上,其本质是将文本分成若干块,每次处理chunksize行数据,最终返回一个TextFileReader对象。若对该对象进行迭代遍历(for循环),可完成输出各个块数据等操作。
chunk_data_all = pd.read_csv("xxx",chunksize=xx)
for chunk_data in chunk_data_all:
print(chunk_data)
Problem 3:如何高效地修改DataFrame中的index和column
solution 3:使用df的rename方法,eg:
df = df.renmae(index={'原名':'新名'},columns={'原名':'新名'})
关于rename的具体内容和其他修改方案可参考:
https://blog.csdn.net/missyougoon/article/details/83780845
Problem 4:df查看数据基本信息的方法
solution 4:
常用函数 | 说明 |
---|---|
df.info() | 打印摘要 |
df.describe() | 描述性统计信息 |
df.head(n) | 前n行 |
df.tail(n) | 尾n行 |
df.to_numpy() | 数据 (ndarray) |
df.isnull() | 判断缺失值 |
df.memory_usage() | 占用内存(字节B) |
常用属性 | 说明 |
---|---|
df.dtypes | 每一列数据的格式 |
df.values | 数据 (ndarray) |
df.shape | 形状 (行数, 列数) |
df.ndim | 维度(dimension) |
df.columns | 列标签 (Index) |
df.columns.values | 列标签 (ndarray) |
df.index | 行标签 (Index) |
df.index.values | 行标签 (ndarray) |
ps:常用属性(属性后面是不带括号的)
problem 5:如何将更改后的数据加载到一个csv文件格式的文件中
solution 5:使用to_csv()函数,该函数的很多操作同read_csv()
二者参数解析参见:https://blog.csdn.net/u010801439/article/details/80033341/
to_csv的使用方法参见:https://blog.csdn.net/toshibahuai/article/details/79034829
problem 6:pandas如何删除某一列
solution 6:主要有三种方法
1.del方法
del df['A'] #删除A列,就地修改df
2.drop方法
- 通过列名称删除
df = df.drop(['B','C'],axis=1) #改行代码中drop方法不就地修改,创建副本返回
df.drop(['B','C'],inplace = True) #添加inplace = True后就地修改
- 通过列数删除(传入参数为int,列表/切片)
df.drop(df.columns[0],axis=1,inplace = True) #删除第一列
df.drop(df.columns[0:3],axis=1,inplace = True) #删除前三列
df.drop(df.columns[[0,2]],axis=1,inplace = True) #删除一三列
- 通过各种筛选方法实现删除列
关于pandas删除行列,增加行列可参见:https://www.cnblogs.com/guxh/p/9420610.html
problem 7:如何进行行/列/综合的升序/降序
solution 7:
函数 | 说明 |
---|---|
df.sort_index(axis=0) | 对行索引升序排列 |
df.sort_index(axis=1, ascending=False) | 对列索引降序排列 |
df[‘列名’].sort_values() | 按值对Series进行排序 |
df.sort_values(by=[‘列名1’,‘列名2’]) | 根据某列的值进行排序 |
df[‘列名’].rank(methods=’’ , ascending=True) | Series对原数据进行平均排名 |
df.rank(axis=‘columns’) | 在列上进行平均排名 |
ps:ascending意为:上升的/上升;综合排序可采用列表/切片
关于本次学习的代码(部分)如下:
第一部分
1.导库并使用绝对路径导入数据
import numpy as np
import pandas as pd
train_data = pd.read_csv("D:/contest/kaggle/Titanic/train.csv")
train_data.head()
2.逐块读取数据
#每1000行作为一个数据模块,逐块读取
chunk_data_all = pd.read_csv("D:/contest/kaggle/Titanic/train.csv",chunksize=100)
3.更改索引名
#更改列索引名称
train_data = train_data.rename(columns={'PassengerId':'乘客ID','Survived':'是否幸存',
'Pclass':'乘客等级(1/2/3等舱位)','Name':'乘客姓名',
'Sex':'性别','Age':'年龄','SibSp':'堂兄弟/妹个数',
'Parch':'父母与小孩个数','Ticket':'船票信息','Fare':'票价',
'Cabin':'客舱','Embarked':'登船港口' })
#train_data.head(10)
train_data.tail(15)
4.判断数据是否为空
train_data.isnull().sum() #统计各列缺失值的数目
#train_data.isnull() #判断数据是否为空/NAN
5.保存数据至新文件
#保存数据
train_data.to_csv("D:/contest/kaggle/Titanic/train_chinese.csv")
第二部分
1.查看数据的列索引
#查看df数据的每列的项(属于查看数据的常用方法)
#由此可见,df的rename方法就地修改了df
train_data.columns
2.查看某一列的数据
#查看"客舱"一列的项
train_data['客舱'].head()
#train_data.客舱.head()
3.删除某一列
#删除survived/是否幸存一列
train_data.drop(['是否幸存'],axis=1,inplace=True)
#del train_data['是否幸存']
train_data.head()
4.设定标准筛选数据
train_data[train_data['年龄']<10].head()
midage = train_data[(train_data['年龄']<50)&(train_data['年龄']>10)] #注意括号不要漏
#5.索引数据
midage = midage.reset_index(drop=True)
#将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
#midage.loc[[100],['乘客等级(1/2/3等舱位','性别']]
#使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
#midage.iloc[[100,105,108],[2,3,4]]
#使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4,5]]
6.进行行/列/综合的升序/降序
df.sort_values(by=['年龄','票价'],ascending=False).head()
7.df类型数据的运算
df = df['堂兄弟/妹个数'] + df['父母与小孩个数']
df.tail()
小结
事实上关于泰坦尼克号中的分析,由于数据较多,单凭排序等方法并不够直观。因此,可以通过调用seaborn库分析各个变量(自变量)和生存情况(因变量)两者的图像关系,用图像来进行分析。