我爱编程

Python编程&数据科学入门 Lesson5

2017-08-24  本文已影响0人  进步小小青年

第五课 - Pandas 入门

本课内容:

*01. pandas DataFrame(数据框)

*02. pandas Series

*03. 数据的选择

*04. 案例:Iris 鸢尾花数据

* 数据的导入和观察
* 数据选择复习
* 数据可视化初探

01. Pandas DataFrame(表格型数据结构)

我们存储数据最常用的形式是表格
比如下面这个表格罗列了2016年GDP最高的5个国家以及对应的首都,人口(百万),GDP(万亿美元),和所在大洲
country capital population GDP continent
United States Washington, D.C. 323 19.42 North America
China Beijing 1389 11.8 Asia
Japan Tokyo 127 4.84 Asia
Germany Berlin 83 3.42 Europe
United Kingdom London 66 2.5 Europe

问题:如何在python中表示以上这个表格?

1.1 从字典创建一个DataFrame

& import pandas as pd # 按惯例将pandas简称为pd
gdp_df = pd.DataFrame(gdp)
输出:gdp_df #列索引为第一行,行索引为0-4
Paste_Image.png
我们可以通过index选项添加自定义的行标签(label)
使用column选项可以选择列的顺序
&gdp_df = pd.DataFrame(gdp, columns = ["country", "capital", "population", "gdp", "continent"], index = ["us", "cn", "jp", "de", "uk"])

输出:gdp_df

Paste_Image.png
也可以使用index和columns直接修改
* gdp_df.index = ["US", "CN", "JP", "DE", "UK"]
* gdp_df.columns = ["Country", "Capital", "Population", "GDP", "Continent"]

输出:gdp_df

Paste_Image.png

增加一列数据

* 增加rank列,表示他们的GDP处在前5位

gdp_df["rank"] = "Top5 GDP"

* 增加国土面积变量,以百万公里计(数据来源:http://data.worldbank.org/

gdp_df["Area"] = [9.15, 9.38, 0.37, 0.35, 0.24]

输出:gdp_df

Paste_Image.png

02.Pandas series

例 1. series = pd.Series([2,4,5,7,3], index=['a','b','c','d','e']) # 一个最简单的series

输出:series # 默认的索引是0到4

Paste_Image.png
* 当我们使用 # 点操作符 # 来查看一个变量时,返回的是一个pandas series
* 在后续的布尔筛选中使用点方法可以简化代码
* US,...,UK是索引
例 2 . gdp_df.GDP

输出:


Paste_Image.png
例 3 . gdp_df.GDP.index —— # 可以直接查看索引index

输出:Index(['US', 'CN', 'JP', 'DE', 'UK'], dtype='object')

例 4 \ . type(gdp_df.GDP) ——# 类型是pandas.core.series.Series

输出:pandas.core.series.Series

例 5 . gdp_df.GDP > 4——#返回一个布尔型的series,在后面讲到的DataFrame的布尔索引中会大量使用

输出:


Paste_Image.png
例 5 \ .gdp_dict = {"US": 19.42, "CN": 11.80, "JP": 4.84, "DE": 3.42, "UK": 2.5}
gdp_series = pd.Series(gdp_dict)
——# 我们也可以将series视为一个长度固定且有顺序的字典,一些用于字典的函数也可以用于series

输出: gdp_series

Paste_Image.png

03. 数据的选择

例 1. gdp_df [["Country"]] ——# 使用变量名加[[]]选取列

输出:


Paste_Image.png
例 2. gdp_df[["Country", "GDP"]]_# 可以同时选取多列

输出:

Paste_Image.png
例 3. type(gdp_df["Country"])_#如果只是用[ ]则产生series

输出:pandas.core.series.Series

例 4. gdp_df.Country_# 使用句点符号也能获取某一列的Series

输出:


Paste_Image.png
例 5.gdp_df[2:5]

loc方法

例 1.gdp_df.loc[["JP","DE"]]
例 2.gdp_df.loc[["JP","DE"],["Country", "GDP", "Continent"]]
例 3.gdp_df.loc[:, ["Country", "GDP", "Continent"]]

iloc方法

例 1.gdp_df.iloc[[2,3]]
例2.gdp_df.loc[["JP","DE"],["Country", "GDP", "Continent"]]
等价于=gdp_df.iloc[[2,3],[0,3,4]]

输出:


Paste_Image.png
例 3.gdp_df.iloc[:, [0,3,4]]
等价于gdp_df.loc[:, ["country", "GDP", "continent"]]

输出:


Paste_Image.png

使用布尔索引(boolean Indexing)筛选数据

例 1.gdp_df[gdp_df.Continent == "Asia"]
例 2.gdp_df.loc[gdp_df.Continent == "Asia"]
Paste_Image.png
例 3.gdp_df [ ( gdp_df.Continent == "Europe") & (gdp_df.GDP > 3 ) ]

输出:

Paste_Image.png

04.案例:Iris 鸢尾花数据

让我们来看一下经典的iris数据

4.1数据的导入和观察

col_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
iris = pd.read_csv('iris.txt', names=col_names)
iris.head(10)
iris.info()
iris.shape
iris.species.unique()
iris.species.value_counts()

4.2数据选择复习

例1:选取花瓣数据,即 petal_length 和 petal_width 这两列

方法一:使用[[ ]]
petal = iris[['petal_length', 'petal_width']]

输出:petal.head()

Paste_Image.png
方法二:使用 .loc[ ]
petal = iris.loc[:, ['petal_length', 'petal_width']]

输出:petal.head()

Paste_Image.png
方法三:使用 .iloc[ ]
petal = iris.iloc[:, 2:4]

输出:petal.head()

Paste_Image.png

例2:选取行索引为5-10的数据行

方法一:使用 [ ]

iris[5:11]

输出:


Paste_Image.png

方法二:使用 .iloc[]

iris.iloc[5:11, :]

输出:


Paste_Image.png

例3:选取品种为 Iris-versicolor 的数据

versicolor = iris[iris.species == 'Iris-versicolor']
versicolor.head()
输出: Paste_Image.png

4.3数据可视化初探

设置在notebook中直接展示图形输出

注意DataFrame也是基于matplotlib作图的

matplotlib inline

设置图片清晰度

config InlineBackend.figure_format = 'retina'

4.3.1散点图

我们首先画散点图(sactter plot),x轴上画出花瓣的长度,y轴上画出花瓣的宽度
我们观察到什么呢?

iris.plot(kind='scatter', x="petal_length", y="petal_width")

<matplotlib.axes._subplots.AxesSubplot at 0x11c0c7a90>

Paste_Image.png

使用布尔索引的方法分别获取三个品种的数据

setosa = iris[iris.species == 'Iris-setosa']
versicolor = iris[iris.species == 'Iris-versicolor']
virginica = iris[iris.species == 'Iris-virginica']

ax = setosa.plot(kind='scatter', x="petal_length", y="petal_width", color='Red', label='setosa', figsize=(10,6))
versicolor.plot(kind='scatter', x="petal_length", y="petal_width", color='Green', ax=ax, label='versicolor')
virginica.plot(kind='scatter', x="petal_length", y="petal_width", color='Orange', ax=ax, label='virginica')
<matplotlib.axes._subplots.AxesSubplot at 0x11e71b550>

Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读