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

1 第一章:数据载入及初步观察

1.4 知道你的数据叫什么

我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?

开始前导入numpy和pandas

import numpy as np
import pandas as pd

1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]

Series

Series是一个,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。轴标签统称为index。
创建系列的基本方法是调用:
s = pd.Series(data, index=index)

  • 运算

    • s1+s2 #索引相同的元素相加,不同的则补充Nan
    • s * 2 #所有元素 * 2
    • s+1 #所有元素+1
  • 常用方法

    • s.index #查看索引
    • s.values #查看数值
    • s.isnull() #查看为空的,返回布尔型
    • s.notnull()
    • s.sort_index() #按索引排序
    • s.sort_values() #按数值排序
#写入代码
#创建Series
s = pd.Series(['a','b','c','d']) #默认索引
s
0    a
1    b
2    c
3    d
dtype: object
s = pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"]) #指定索引
s
a    0.174499
b    0.826603
c   -0.504941
d    1.154826
e    0.194536
dtype: float64
s = pd.Series({"b": 1, "a": 0, "c": 2}) #指定索引
s
b    1
a    0
c    2
dtype: int64
s = pd.Series(5.0, index=["a", "b", "c", "d", "e"]) #相同值
s
a    5.0
b    5.0
c    5.0
d    5.0
e    5.0
dtype: float64
#我们举的例子
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

DataFrame

dataframe是非常常见的一个表格型数据结构,每一列可以是不同的数值类型,有行索引、列索引。提到它就会自然想到Pandas这个包。平常用Python处理xlsx、csv文件,读出来的就是dataframe格式。
DataFrame 接受多种不同类型的输入:

  • 一维数组、列表、字典或系列的字典
  • 二维 numpy.ndarray
  • 结构化或记录ndarray
  • 一种 Series
  • 其他 DataFrame
#我们举的例子
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
d = {
    "one": pd.Series([1.0, 2.0, 3.0], index=["a", "b", "c"]),
    "two": pd.Series([1.0, 2.0, 3.0, 4.0], index=["a", "b", "c", "d"]),
    "three": pd.Series([1.0, 2.0, 3.0, 5.0], index = ["a", "b", "c", "e"])
}
df = pd.DataFrame(d)
df

【VC小注】
可以看到,当规定的index数量、名称不一致时,会用NaN补齐表格

df = pd.DataFrame(d, index = ["b", "a", "e"], columns=["two", "three"])
df

【VC小注】
可以通过规定index、columns选取行/列组成表格

1.4.2 任务二:根据上节课的方法载入"train.csv"文件

#写入代码
data = pd.read_csv("train.csv")
data.head(5)

也可以加载上一节课保存的"train_chinese.csv"文件。通过翻译版train_chinese.csv熟悉了这个数据集,然后我们对trian.csv来进行操作

1.4.3 任务三:查看DataFrame数据的每列的名称

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

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

【总结】查看列值的方法:
法一:df[列名]
法二:df.列名

#写入代码
data["Cabin"].head(5)
0     NaN
1     C85
2     NaN
3    C123
4     NaN
Name: Cabin, dtype: object
#写入代码
data.Cabin.head(5)
0     NaN
1     C85
2     NaN
3    C123
4     NaN
Name: Cabin, dtype: object

1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去

#写入代码
df_test = pd.read_csv("test_1.csv")
df_test.columns
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
      dtype='object')

【总结】删除列:
法一:del df[列名]
法二:df.columns.delete(删除列的位置),若删除多列用[列1位置,……]
【注】 该方法不是真的删除了指定列,而是在输出结果上删除了指定列名,指定列数据仍然存在

#写入代码
del df_test[ 'a']
df_test.columns
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
df_test.columns.delete(-1)
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
df_test.columns
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
      dtype='object')

1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

从行或列中删除指定的标签,采用以下语句:
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’)

#写入代码
data.drop(columns = ['PassengerId','Name','Age','Ticket'])
data.head(5)

可以看到,此处依然是全部列数,说明train_data本质并没有发生变化
drop操作后直接观察可以看到隐藏指定列的数据

data.drop(columns = ['PassengerId','Name','Age','Ticket']).head(5)

如果想要完全的删除数据,使用inplace=True ,因为使用inplace就将原数据覆盖了

1.5 筛选的逻辑

表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。

下面我们还是用实战来学习pandas这个功能。

1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

df[筛选条件]

#写入代码
data[data["Age"]<10].head(5)

1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

使用 & 表示且

#写入代码
midage = data[(data["Age"]>10) & (data["Age"]<50)]
midage.head(5)

1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

【总结】索引:
法一:使用行名和列名,df.loc[[行名], [列名]]
法二:使用行序和列序,df.iloc[[行索引], [列索引]]

#写入代码
midage.loc[100,["Pclass", "Sex"]]
Pclass         3
Sex       female
Name: 100, dtype: object

但是,因为midage是对原表筛选得到的,它的行名依然是原表的行名,即其与现表的索引不一定对应,故要对行索引进行更新,使用如下命令:
df.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=’’)
其中,drop=True时,覆盖原索引进行更新;drop=False时,将原索引作为表格的一列数据,增加新索引

midage = midage.reset_index(drop = True)
midage

576 rows × 12 columns

midage.loc[100,["Pclass","Sex"]]
Pclass       2
Sex       male
Name: 100, dtype: object

1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

#写入代码
midage.loc[[100, 105, 108], ["Pclass", "Name", "Sex"]]

1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

#写入代码
midage.iloc[[100,105,108],[2,3,4]]
09-14 04:09