复习: 数据分析的第一步,加载数据我们已经学习完毕了。当数据展现在我们面前的时候,我们所要做的第一步就是认识他,今天我们要学习的就是了解字段含义以及初步观察数据 。
1 第一章:数据载入及初步观察 1.4 知道你的数据叫什么 我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?
开始前导入numpy和pandas
1 2 import numpy as npimport pandas as pd
1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题] 1 2 3 4 5 sdata = {'Ohio' : 35000 , 'Texas' : 71000 , 'Oregon' : 16000 , 'Utah' : 5000 } example_1 = pd.Series(sdata) example_1
Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
dtype: int64
1 2 3 4 5 data = {'state' : ['Ohio' , 'Ohio' , 'Ohio' , 'Nevada' , 'Nevada' , 'Nevada' ], 'year' : [2000 , 2001 , 2002 , 2001 , 2002 , 2003 ],'pop' : [1.5 , 1.7 , 3.6 , 2.4 , 2.9 , 3.2 ]} example_2 = pd.DataFrame(data) example_2
state
year
pop
0
Ohio
2000
1.5
1
Ohio
2001
1.7
2
Ohio
2002
3.6
3
Nevada
2001
2.4
4
Nevada
2002
2.9
5
Nevada
2003
3.2
#### 1.4.2 任务二:根据上节课的方法载入"train.csv"文件
1 2 df=pd.read_csv('./titanic/train.csv' )
也可以加载上一节课保存的"train_chinese.csv"文件。通过翻译版train_chinese.csv熟悉了这个数据集,然后我们对trian.csv来进行操作
#### 1.4.3 任务三:查看DataFrame数据的每列的名称
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
dtype='object')
#### 1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]
0 NaN
1 C85
2 NaN
3 C123
4 NaN
5 NaN
6 E46
7 NaN
8 NaN
9 NaN
Name: Cabin, dtype: object
1 2 3 df.Cabin.values[:10 ] df.Cabin.head(10 )
0 NaN
1 C85
2 NaN
3 C123
4 NaN
5 NaN
6 E46
7 NaN
8 NaN
9 NaN
Name: Cabin, dtype: object
#### 1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去
1 2 3 test_1=pd.read_csv('../第一单元项目集合/test_1.csv' ) test_1.head()
Unnamed: 0
PassengerId
Survived
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
a
0
0
1
0
3
Braund, Mr. Owen Harris
male
22.0
1
0
A/5 21171
7.2500
NaN
S
100
1
1
2
1
1
Cumings, Mrs. John Bradley (Florence Briggs Th...
female
38.0
1
0
PC 17599
71.2833
C85
C
100
2
2
3
1
3
Heikkinen, Miss. Laina
female
26.0
0
0
STON/O2. 3101282
7.9250
NaN
S
100
3
3
4
1
1
Futrelle, Mrs. Jacques Heath (Lily May Peel)
female
35.0
1
0
113803
53.1000
C123
S
100
4
4
5
0
3
Allen, Mr. William Henry
male
35.0
0
0
373450
8.0500
NaN
S
100
1 2 3 4 test_1.drop('Unnamed: 0' ,axis=1 ,inplace=True ) test_1.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
dtype='object')
【思考】还有其他的删除多余的列的方式吗?
1 2 3 del test_1['Unnamed: 0' ]test_1.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
dtype='object')
1.4.6 任务六: 将[‘PassengerId’,’Name’,’Age’,’Ticket’]这几个列元素隐藏,只观察其他几个列元素 1 2 df.drop(['PassengerId' , 'Name' , 'Age' ,'Ticket' ], axis=1 ).head(10 )
Survived
Pclass
Sex
SibSp
Parch
Fare
Cabin
Embarked
0
0
3
male
1
0
7.2500
NaN
S
1
1
1
female
1
0
71.2833
C85
C
2
1
3
female
0
0
7.9250
NaN
S
3
1
1
female
1
0
53.1000
C123
S
4
0
3
male
0
0
8.0500
NaN
S
5
0
3
male
0
0
8.4583
NaN
Q
6
0
1
male
0
0
51.8625
E46
S
7
0
3
male
3
1
21.0750
NaN
S
8
1
3
female
0
2
11.1333
NaN
S
9
1
2
female
1
0
30.0708
NaN
C
【思考】对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?
【思考回答】
如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用
### 1.5 筛选的逻辑
表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。
下面我们还是用实战来学习pandas这个功能。
#### 1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
1 2 3 print ((df['Age' ]<10 ).head(2 ))df[df['Age' ]<10 ].head(2 )
0 False
1 False
Name: Age, dtype: bool
PassengerId
Survived
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
7
8
0
3
Palsson, Master. Gosta Leonard
male
2.0
3
1
349909
21.075
NaN
S
10
11
1
3
Sandstrom, Miss. Marguerite Rut
female
4.0
1
1
PP 9549
16.700
G6
S
#### 1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
1 2 3 midage=df[(df['Age' ]>10 ) & (df['Age' ]<50 )] midage
【提示】了解pandas的条件筛选方式以及如何使用交集和并集操作
#### 1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
1 2 3 4 midage = midage.reset_index(drop=True ) print (midage)midage.loc[1 ][['Pclass' , 'Sex' ]]
PassengerId Survived Pclass \
0 1 0 3
1 2 1 1
2 3 1 3
3 4 1 1
4 5 0 3
.. ... ... ...
571 886 0 3
572 887 0 2
573 888 1 1
574 890 1 1
575 891 0 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
3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1
4 Allen, Mr. William Henry male 35.0 0
.. ... ... ... ...
571 Rice, Mrs. William (Margaret Norton) female 39.0 0
572 Montvila, Rev. Juozas male 27.0 0
573 Graham, Miss. Margaret Edith female 19.0 0
574 Behr, Mr. Karl Howell male 26.0 0
575 Dooley, Mr. Patrick male 32.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
3 0 113803 53.1000 C123 S
4 0 373450 8.0500 NaN S
.. ... ... ... ... ...
571 5 382652 29.1250 NaN Q
572 0 211536 13.0000 NaN S
573 0 112053 30.0000 B42 S
574 0 111369 30.0000 C148 C
575 0 370376 7.7500 NaN Q
[576 rows x 12 columns]
Pclass 1
Sex female
Name: 1, dtype: object
【提示】在抽取数据中,我们希望数据的相对顺序保持不变,用什么函数可以达到这个效果呢?
#### 1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
1 2 midage.loc[[100 ,105 ,108 ],['Pclass' ,'Name' ,'Sex' ]]
Pclass
Name
Sex
100
2
Byles, Rev. Thomas Roussel Davids
male
105
3
Cribb, Mr. John Hatfield
male
108
3
Calic, Mr. Jovo
male
#### 1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
1 2 midage.iloc[[100 ,105 ,108 ],[2 ,3 ,4 ]]
Pclass
Name
Sex
149
2
Byles, Rev. Thomas Roussel Davids
male
160
3
Cribb, Mr. John Hatfield
male
163
3
Calic, Mr. Jovo
male
【思考】对比iloc和loc的异同