pandas归一化某一列_十分钟带你了解pandas常用方法

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)

输出结果

PassengerId Survived Pclass \

0 1 0 3

1 2 1 1

2 3 1 3

Name Sex Age SibSp \

0 Braund, Mr. Owen Harris male 22.0 1

1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1

2 Heikkinen, Miss. Laina female 26.0 0

Parch Ticket Fare Cabin Embarked

0 0 A/5 21171 7.2500 NaN S

1 0 PC 17599 71.2833 C85 C

2 0 STON/O2. 3101282 7.9250 NaN S

检查数据类型

检测下数据格式是否为DataFrame

print(type(df))

运行结果

二、 DataFrame数据概况

我们想知道数据如下知识: 1. 展示dataframe前后几条记录 2. 显示dataframe的列名字 3. 查看dataframe的维度情况(几行几列)

2.1展示dataframe前后几行

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

df.head(2)

运行结果

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked

0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S

1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C

#展示后三条记录

df.tail(3)

运行结果

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked

888 889 0 3 Johnston, Miss. Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.45 NaN S

889 890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.00 C148 C

890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.75 NaN Q

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_namesgeshi

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索引。如下面的左侧数字序号

2.1 取一列数据

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

df['Name'][:5]

运行结果

0 Braund, Mr. Owen Harris

1 Cumings, Mrs. John Bradley (Florence Briggs Th...

2 Heikkinen, Miss. Laina

3 Futrelle, Mrs. Jacques Heath (Lily May Peel)

4 Allen, Mr. William Henry

Name: Name, dtype: object

2.2取多列数据

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

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

df[cols]

运行结果

PassengerId Survived Pclass Name Sex

0 1 0 3 Braund, Mr. Owen Harris male

1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female

2 3 1 3 Heikkinen, Miss. Laina female

3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female

4 5 0 3 Allen, Mr. William Henry male

四、从dataframe中取行数据(记录)

这里方法很多,有loc、iloc、ix。我就只写ix,

总之没必要学那么多,搞糊涂了,够用就好。

ix[row,col] 中括号中第一个参数row是行参数,你想选择的数据行数。

第二个参数col是列参数,选择你想要的列数据项。

4.1取一行数据

#第一行所有数据

df.ix[0,:

运行结果

PassengerId 1

Survived 0

Pclass 3

Name Braund, Mr. Owen Harris

Sex male

Age 22

SibSp 1

Parch 0

Ticket A/5 21171

Fare 7.25

Cabin NaN

Embarked S

Name: 0, dtype: object

第一行的某几列数据

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,:]

运行结果

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked

0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S

1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C

2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S

3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S

4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

5 6 0 3 Moran, Mr. James male NaN 0 0 330877 8.4583 NaN Q

取多行,某几列

df.ix[:5,col]

运行结果

Survived Pclass Sex

0 0 3 male

1 1 1 female

2 1 3 female

3 1 1 female

4 0 3 male

5 0 3 male

五、取某一单元格数据

会了三四节,这部分其实你已经会了。

比如我想获取

第一行第一列。df.ix[0,0]

第三行第七列。df.ix[2,6]

df.ix[0,0]

运行结果

1

df.ix[2,6]

运行结果

0

六、缺失值处理

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

df.dropna(axis)

默认直接使用df.dropna()

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

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

df.dropna(axis=0,subset)

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

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

6.1按照行进行缺失值处理

df.dropna(axis=1)

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

df.dropna(axis=1)

运行结果

PassengerId Survived Pclass Name Sex SibSp Parch Ticket Fare

0 1 0 3 Braund, Mr. Owen Harris male 1 0 A/5 21171 7.2500

1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 1 0 PC 17599 71.2833

2 3 1 3 Heikkinen, Miss. Laina female 0 0 STON/O2. 3101282 7.9250

3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 1 0 113803 53.1000

4 5 0 3 Allen, Mr. William Henry male 0 0 373450 8.0500

6.2按照列进行缺失值处理

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

df.dropna(axis=0)

运行结果

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked

1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C

3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S

6 7 0 1 McCarthy, Mr. Timothy J male 54.0 0 0 17463 51.8625 E46 S

10 11 1 3 Sandstrom, Miss. Marguerite Rut female 4.0 1 1 PP 9549 16.7000 G6 S

11 12 1 1 Bonnell, Miss. Elizabeth female 58.0 0 0 113783 26.5500 C103 S

对指定列进行缺失值处理

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

运行结果

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked

0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S

1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C

2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S

3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S

4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

七、归一化处理

数据集中,不同的列的数据可能在不同量级,如果直接进行分析。模型会认为数字大的影响力大,数字小的影响力小。

最终结果可能导致量级小的变量被剔除出模型。因此需要将数据归一化,变成同一量级的数据,这就是归一化操作。

在这里我们只对一列操作下,其余列也需要操作,但为了方便,这里只写一列的归一化处理。

处理步骤:

选取该列的最大值

max_value = df[col].max()

2.该列所有值均除以max_value

这里要注意,我们会用到pandas特性,矢量化操作,

也就是可以对一个列表进行批量同样的操作。

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

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

df['Fare']

运行结果

0 7.2500

1 71.2833

2 7.9250

3 53.1000

4 8.0500

5 8.4583

6 51.8625

7 21.0750

8 11.1333

9 30.0708

Name: Fare, dtype: float64

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

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

max_value

运行结果

512.32920000000001

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

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

df['new_Fare']

运行结果

0 0.014151

1 0.139136

2 0.015469

3 0.103644

4 0.015713

5 0.016510

6 0.101229

7 0.041136

8 0.021731

9 0.058694

Name: new_Fare, dtype: float64

八、排序

df.sort_values(col,inplace,ascending)

col 对col列进行排序

inplace 布尔型值,是否原地操作。True时,操作结果覆盖掉原始数据,原始数据被修改.False时,新建一个新的数据,原始数据没有被修改

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

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

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

运行结果

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked new_Fare

630 631 1 1 Barkworth, Mr. Algernon Henry Wilson male 80.0 0 0 27042 30.0000 A23 S 0.058556

851 852 0 3 Svensson, Mr. Johan male 74.0 0 0 347060 7.7750 NaN S 0.015176

493 494 0 1 Artagaveytia, Mr. Ramon male 71.0 0 0 PC 17609 49.5042 NaN C 0.096626

96 97 0 1 Goldschmidt, Mr. George B male 71.0 0 0 PC 17754 34.6542 A5 C 0.067640

116 117 0 3 Connors, Mr. Patrick male 70.5 0 0 370369 7.7500 NaN Q 0.015127

九、索引重新

将排序后的索引重新排序

df.reset_index(drop)

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

df.reset_index(drop=False)

运行结果

index PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked new_Fare

0 630 631 1 1 Barkworth, Mr. Algernon Henry Wilson male 80.0 0 0 27042 30.0000 A23 S 0.058556

1 851 852 0 3 Svensson, Mr. Johan male 74.0 0 0 347060 7.7750 NaN S 0.015176

2 493 494 0 1 Artagaveytia, Mr. Ramon male 71.0 0 0 PC 17609 49.5042 NaN C 0.096626

3 96 97 0 1 Goldschmidt, Mr. George B male 71.0 0 0 PC 17754 34.6542 A5 C 0.067640

4 116 117 0 3 Connors, Mr. Patrick male 70.5 0 0 370369 7.7500 NaN Q 0.015127

十、求平均值

10.1所有列的平均值信息

df.mean()

运行结果

PassengerId 446.000000

Survived 0.383838

Pclass 2.308642

Age 29.699118

SibSp 0.523008

Parch 0.381594

Fare 32.204208

new_Fare 0.062858

dtype: float64

10.2 单个列的平均值

df['Age'].mean()

运行结果

29.69911764705882

十一、矢量化操作(批量操作)

一般对如list样式的数据批量操作,需要写循环,但是这样费时费力。

pandas基于numpy,可进行矢量化操作,一行就能完成复杂的循环语句,而且运行效率还很高。

11.1对Age列批量加10

df['Age']+10).head

运行结果

630 90.0

851 84.0

493 81.0

96 81.0

116 80.5

672 80.0

745 80.0

33 76.0

54 75.0

280 75.0

Name: Age, dtype: float64

11.2对Age列批量减20

df['Age']-10

运行结果

630 70.0

851 64.0

493 61.0

96 61.0

116 60.5

672 60.0

745 60.0

33 56.0

54 55.0

280 55.0

Name: Age, dtype: float64

十二、透视表

类似groupby,这个透视表不好说是什么意思。大家直接看结果,好不?

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)

运行结果

Survived

0 30.626179

1 28.343690

Name: Age, dtype: float64

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

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

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

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

Survived

0 2.531876

1 1.950292

Name: Pclass, dtype: float64

你可能感兴趣的:(pandas归一化某一列)