数据分析——第一章:第一节数据载入及初步观察

复习:数据分析的第一步,加载数据我们已经学习完毕了。当数据展现在我们面前的时候,我们所要做的第一步就是认识他,今天我们要学习的就是了解字段含义以及初步观察数据

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数据的每列的名称

1
2
#写入代码
df.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

1.4.4任务四:查看”Cabin”这列的所有值[有多种方法]

1
2
#写入代码
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
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.columns
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

【思考】对比ilocloc的异同

1
2
3
4
5
6
7
8
9
# *   当你需要根据**标签名称**(如行索引名或列名)来选取数据时,使用 `loc`。这使得代码更具可读性,因为你可以直接看到你正在操作的标签。
# * 当你需要根据**整数位置**来选取数据时(不关心标签名称,或者标签不是整数),使用 `iloc`。这在处理没有有意义标签的 DataFrame,或者需要进行与位置相关的操作时很有用。
# * **注意**:如果 DataFrame 的索引是默认的整数索引 (0, 1, 2, ...),那么 `loc` 和 `iloc` 在使用单个整数或整数切片进行行选择时,行为可能会相似,但这可能会导致混淆。
# * 例如,如果 `df.index` 是 `[0, 1, 2, 5, 6]`:
# * `df.loc[0]` 会选择索引标签为 `0` 的行。
# * `df.iloc[0]` 也会选择第一行(即索引标签为 `0` 的行)。
# * `df.loc[3]` 会报错,因为没有索引标签为 `3`。
# * `df.iloc[3]` 会选择第四行(即索引标签为 `5` 的行)。
# * 为了避免混淆,最佳实践是:当你知道你正在使用标签时,明确使用 `loc`;当你知道你正在使用整数位置时,明确使用 `iloc`。