pandas常用知识 一、读取csv文件为dataframe 二、dataframe的数据概况 三、取列数据 四、取行数据 五、取某一单元格数据 六、缺失值处理 七、归一化处理 八、排序 九、索引重新编号 十、求均值 十一、矢量化操作(批量操作) 十二、透视表

一、读取csv文件为dataframe pandas很好的一点是,可以操作表文件。输出为dataframe格式,这点很nice。 使用pandas.read_csv()读取csv文件,输出为dataframe格式数据。 这里数据tran.csv数据集下载自kaggle网站。


import pandas as pd


filepath = r'/Users/suosuo/Desktop/titanic/train.csv'

df = pd.read_csv(filepath)


#为了方便,我只显示三行,其实结果并不是这样子

print(df)   

插入图片


#检测下数据格式是否为DataFrame

print(type(df))

class 'pandas.core.frame.DataFrame

二、 DataFrame数据概况 我们想知道数据如下知识:

  • 展示dataframe前后几条记录

  • 显示dataframe的列名字

  • 查看dataframe的维度情况(几行几列)

2.1展示dataframe前后几行


#展示前两条记录(根据需要显示条数)

df.head(2)

#展示后三条记录

df.tail(3)

2.2展示dataframe列名


#展示列名

col_names = df.columns

col_names

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')


#查看下col_names格式

type(col_names)

pandas.indexes.base.Index


#将col_names转化为list

col_list = col_names.tolist()

col_list

['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked']

三、从dataframe中取列数据 使用dataframe[column_name],返回series格式数据。 series序列数据类似于list,你可以近似等同于list。 只不过返回数据中会多一列index索引。如下面的左侧数字序号

3.1 取一列数据

#这里我们一列,如取Name列数据

df['Name'][:5]

3.2取多列数据


#这里返回的数据还是dataframe格式,为了方便也只显示前几条记录

cols = ['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex']

df[cols]

四、从dataframe中取行数据(记录) 这里方法很多,有loc、iloc、ix。我就只写ix, 总之没必要学那么多,搞糊涂了,够用就好。 ix[row, col] 中括号中第一个参数row是行参数,你想选择的数据行数。 第二个参数col是列参数,选择你想要的列数据项。

4.1取一行数据


#第一行所有数据

df.ix[0, :]


#第一行的某几列数据

col = ['Survived', 'Pclass', 'Sex']

df.ix[0, col]

Survived 0

Pclass 3

Sex male

Name: 0, dtype: object

4.2取多行数据


#取多行数据,所有列。这里我选择前5行,所有列.

#这里是不是很像切片操作。python基础很重要

df.ix[:5, :]


#取多行,某几列

df.ix[:5, col]

五、取某一单元格数据 会了三四节,这部分其实你已经会了。 比如我想获取第一行第一列。df.ix[0,0] 第三行第七列。df.ix[2,6]


df.ix[0,0]

1


df.ix[2,6]

六、缺失值处理 缺失值一般标记为NaN,处理办法如下


df.dropna(axis)


  默认直接使用df.dropna()


  axis=1,按照行进行缺失值处理


  axis=0,按照列进行缺失值处理




df.dropna(axis=0,subset)


  axis=0,按照列方向处理subset中的列缺失值


  subset=[column]   subset含有一个或多个列名的的list

6.1按照行进行缺失值处理


#为了显示方便,只显示前五行。

#axis=1表示按照行方向处理NAN

df.dropna(axis=1)

6.2按照列进行缺失值处理

#按照列处理缺失值(为显示方便,只显示前5行)

df.dropna(axis=0)


#对指定列进行缺失值处理

df.dropna(axis=0,subset=['Sex','Age'])

七、归一化处理 数据集中,不同的列的数据可能在不同量级,如果直接进行分析。模型会认为数字大的影响力大,数字小的影响力小。 最终结果可能导致量级小的变量被剔除出模型。因此需要将数据归一化,变成同一量级的数据,这就是归一化操作。 在这里我们只对一列操作下,其余列也需要操作,但为了方便,这里只写一列的归一化处理。

处理步骤:


1.选取该列的最大值

max_value = df[col].max()


2.该列所有值均除以max_value

这里要注意,我们会用到pandas特性,矢量化操作,也就是可以对一个列 表进行批量同样的操作。

#这里我们选Fare列进行归一化,先看下Fare的数据

#为了方便显示,只显示了前10个

df['Fare']

#这里我们选Fare列进行归一化

max_value = df['Fare'].max()

max_value

#这里我们选Fare列进行归一化

max_value = df['Fare'].max()

max_value

512.32920000000001


#归一化,并将数据传入新列new_Fare

df['new_Fare']=df['Fare']/max_value

df['new_Fare']

八、排序


df.sort_values(col,inplace,ascending)


col          对col列进行排序

inplace      布尔型值,是否原地操作。

             True时,操作结果覆盖掉原数据,原数据被修改

             False时,新建一个新数据,原数据未被修改


ascending    布尔型值。升序降序。 False降序,True升序

#对Age列进行降序操作,不修改原始数据

df.sort_values('Age',inplace=False,ascending=False)

九、索引重新 将排序后的索引重新排序


df.reset_index(drop)


drop    为布尔型值,True表示修改原始数据的索引。

                  False保留原始数据索引序列。

df.reset_index(drop=False)

十、求平均值 10.1所有列的平均值信息


df.mean()

10.2 单个列的平均值

df['Age'].mean()

29.69911764705882

十一、矢量化操作(批量操作) 一般对如list样式的数据批量操作,需要写循环,但是这样费时费力。 pandas基于numpy,可进行矢量化操作,一行就能完成复杂的循环语句,而且运行效率还很高。


#对Age列批量加10

df['Age']+10).head


#对Age列批量减20

df['Age']-10

十二、透视表


这个透视表不好说是什么意思。大家直接看结果吧。

df.pivot_table(index=col1,values=col2,aggfunc='numpy函数')

围绕index参数列,分析各个col2,aggfunc是np函数,当然这里的aggfunc也可以是自定义函数。


#分析平均年龄对对生存率的影响。

#0为死亡,1为生存。


#这里我们发现年龄对生存率有影响。

import numpy as np

df.pivot_table(index='Survived',values='Age',aggfunc=np.mean)


#分析仓位等级对生存率影响。0为死亡,1为生存。

#仓位为一等二等三等分别取值1,2,3

#一等舱最高级。我们发现仓位等级对生存也有影响。

df.pivot_table(index='Survived',values='Pclass',aggfunc=np.mean)