Python机器学习数据科学包-pandas

1275-李同学

发表文章数:25

首页 » Python » 正文

1. ipython开发环境搭建

ipython是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。

##搭建ipython开发环境
pip install jupyter
pip install numpy
pip install matplotlib
windows下还要额外安装pyreadline
pip install pyreadline

1.1 ipython notebook

ipython notebook包含以下特点:

  • web上的ipython
  • 显示内联图片
  • 导出数据和分析过程
#启动notebook
ipython notebook

2. Pandas入门

2.1 数据结构

2.1.1 Series

Series 是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。轴标签统称为索引。调用 pd.Series 函数即可创建 Series:

s = pd.Series(data, index=index)

data 支持以下数据类型

  • Python 字典
  • 多维数组
  • 标量值(如,5)

index 是轴标签列表。

import numpy as np
import pandas as pd
#data 是多维数组,
#index 长度必须与 data 长度一致。没有指定 index 参数时,创建数值型索引,即 [0, ..., len(data) - 1]。
s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
#data是字典
d = {'b': 1, 'a': 0, 'c': 2}
pd.Series(d)
#data是标量
pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])

注意
Pandas 的索引值可以重复。不支持重复索引值的操作会触发异常。其原因主要与性能有关,有很多计算实例,比如 GroupBy 操作就不用索引。
data 是标量值时,必须提供索引。Series 按索引长度重复该标量值。

2.1.2 DataFrame

DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。DataFrame 是最常用的 Pandas 对象,与 Series 一样,DataFrame 支持多种类型的输入数据:

  • 一维 ndarray、列表、字典、Series 字典
  • 二维 numpy.ndarray
  • 结构多维数组或记录多维数组
  • Series
  • DataFrame

2.1.2.1 用 Series 字典或字典生成 DataFrame

生成的索引是每个 Series 索引的并集。先把嵌套字典转换为 Series。如果没有指定列,DataFrame 的列就是字典键的有序列表。

d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
   'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
#Series 字典加上指定索引时,会丢弃与传递的索引不匹配的所有数据。
pd.DataFrame(d, index=['d', 'b', 'a'])
pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])
#index 和 columns 属性分别用于访问行、列标签
df.index
df.columns

2.1.2.2 用多维数组字典、列表字典生成 DataFrame

多维数组的长度必须相同。如果传递了索引参数,index 的长度必须与数组一致。如果没有传递索引参数,生成的结果是 range(n),n 为数组长度。

d = {'one': [1., 2., 3., 4.],
   'two': [4., 3., 2., 1.]}
pd.DataFrame(d)
pd.DataFrame(d, index=['a', 'b', 'c', 'd'])

2.1.2.3 用结构多维数组或记录多维数组生成 DataFrame

data = np.zeros((2, ), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
data[:] = [(1, 2., 'Hello'), (2, 3., "World")]
pd.DataFrame(data)
pd.DataFrame(data, index=['first', 'second'])
pd.DataFrame(data, columns=['C', 'A', 'B'])

2.1.2.4 用列表字典生成 DataFrame

data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
pd.DataFrame(data2)
pd.DataFrame(data2, index=['first', 'second'])
pd.DataFrame(data2, columns=['a', 'b'])

2.1.2.5 用元组字典生成 DataFrame

元组字典可以自动创建多层索引 DataFrame。

pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
   ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
   ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
   ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
   ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})

2.2 数据的操作

2.2.1 生成数据和查看数据

import numpy as np
import pandas as pd
s = pd.Series([1, 3, 5, np.nan, 6, 8])
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
#查看 DataFrame 头部和尾部数据
df.head()
df.tail(3)
#显示索引与列名
df.index
df.columns
#输出底层数据的 NumPy 对象
df.to_numpy()
#快速查看数据的统计摘要
df.describe()
#转置数据
df.T
#按轴排序
df.sort_index(axis=1, ascending=False)
#按值排序
df.sort_values(by='B')

2.2.2 获取数据

2.2.2.1 单列和切片

#选择单列,产生 Series,与 df.A 等效
df['A']
#用 [ ] 切片行
df[0:3]
df['20130102':'20130104']

2.2.2.2 按标签选择

#用标签提取一行数据
df.loc[dates[0]]
#用标签选择多列数据
df.loc[:, ['A', 'B']]
#用标签切片,包含行与列结束点
df.loc['20130102':'20130104', ['A', 'B']]
#返回对象降维
df.loc['20130102', ['A', 'B']]
#提取标量值
df.loc[dates[0], 'A']

2.2.2.2 按位置选择

#用整数位置选择
df.iloc[3]
#用整数切片
df.iloc[3:5, 0:2]
#用整数列表按位置切片
df.iloc[[1, 2, 4], [0, 2]]
#显式整行切片
df.iloc[1:3, :]
#显式整列切片
df.iloc[1:3, :]
#显式提取值
df.iloc[1, 1]
#快速访问标量,与上述方法等效
df.iat[1, 1]

2.2.2.3 布尔索引

#用单列的值选择数据
df[df.A > 0]
#选择 DataFrame 里满足条件的值
df[df > 0]

未经允许不得转载:作者:1275-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Python机器学习数据科学包-pandas》 发布于2020-12-04

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录