复习:数据分析的第一步,加载数据我们已经学习完毕了。当数据展现在我们面前的时候,我们所要做的第一步就是认识他,今天我们要学习的就是了解字段含义以及初步观察数据。
1 第一章:数据载入及初步观察
1.4 知道你的数据叫什么
我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?
开始前导入numpy和pandas
1 2
| import numpy as np import 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的异同