Fork me on GitHub

数据分析 - Pandas

为将来的机器学习之旅准备,我们先来学习一下机器学习的常用库Pandas

Pandas

数据结构

Series 数据结构

Series是带有行标签的一维数组,可以保存任何数据类型,一维数组+对应索引(类似key-values)

基本属性

  • s.index - 查看Series的索引
  • s.values - 查看Series的值
  • s.name - 查看Series的名称 - 参数name=’…’创建一个Series的名称
  • s.rename() - 对Series重命名,并且指向一个新的Series,原Series不变。

创建方法

1.由字典创建:key-index,values-values

1
s = pandas.Series(np.random.rand(5))

2.由一维数组创建

1
2
3
4
s = pandas.Series(obj, index=[...], dtype='...')
# obj -- 一维数组
# index 与 obj 的长度一致
# dtype - 设置数据类型

3.由标量创建

1
2
s = pd.Series(10, index = range(4))
# 如果obj是标量值,则必须提供索引。该值会重复,来匹配索引的长度。

索引

1.位置下标

1
2
3
4
5
s = pd.Series(np.random.rand(5))
s[0]
# 输出结果为numpy.float格式,float()函数转换为python float格式。
# numpy.float与float占用字节不同
s[-1] # 错误 无法逆向索引

2.标签索引,类似字典的key索引

1
2
s['a'] # 索引一个
s[['a','b','...']] # 索引多个,索引结果是新的数组。

3.切片索引

1
2
3
4
5
6
7
8
#下标索引切片 - 和list写法一样

# 使用index自定义索引
s = pd.Series(np.random.rand(5), index = ['a','b','c','d','e'])

s[1:4] 切片
# index 索引、切片
s['a':'c'] 切片

4.布尔型索引 - 返回的是一个由布尔值组成的新的数组

1
2
3
4
5
6
7
s = pd.Series(np.random.rand(3))

s[4] = None
s1_bool = s > 50 # 判断条件
s2_bool = s.isnull() # 判断条件
s[s1_bool] # 或者 s[s>50]
s[s2_bool] # 或者 s[s.isnull()]

.isnull()/ .notnull判断是否为空值(None-空值、NaN-有问题的数值,都会被识别为空。)


基本技巧

增删改查

1.增加

  • 直接索引添加值 : s[6]=100 (若索引存在,则重新赋值)
  • 直接添加一个数组,以生成新数组 : s3 = s1.append(s2);

2.删除

  • s.drop(inplace=False) : 删除元素后返回副本,若不返回副本,则inplace=True

3.修改

  • 通过索引直接重新赋值,即修改。

4.查看

  • s.head(n) : 查看头部数据 默认前5个,或者参数n个。
  • s.tail(n) : 查看尾部数据 默认后5个,或者参数n个。

重新索引

  • .reindex(): 根据索引重新排序,如果当前索引不存在,则引入缺失值。
  • 参数为列表[]
  • s.reindex(['c','b','a','d'], fill_value = 0)
  • fill_value参数:填充缺失值的值

对齐运算

  • 对齐运算:+
  • Series对齐时(s1 + s2)根据标签index自动对齐,index顺序不会影响计算。
  • 空值和任何值计算结果均为空值

DataFrame 数据结构

结构说明

“二维数组”Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。

1.Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。

2.Dataframe带有index(行标签)和columns(列标签)

基本属性/方法

1.查看行标签

语法 : df.index

2.查看列标签

语法 : df.columns

3.查看值

语法 : df.values

Dataframe的创建 df=pd.DataFrame(data)

字典创建

1.数组-组成的字典

1
2
data2 = {'one':np.random.rand(3),
'two':np.random.rand(3)}

2.Series-组成的字典

1
2
3
4
5
6
7
data1 = {'one':pd.Series(np.random.rand(2)),
'two':pd.Series(np.random.rand(3))}
# 没有设置index的Series

data2 = {'one':pd.Series(np.random.rand(2), index = ['a','b']),
'two':pd.Series(np.random.rand(3),index = ['a','b','c'])}
# 设置了index的Series
备注:Series可以长度不一样,生成的Dataframe会出现NaN值

3.列表-组成的字典

1
2
3
data1 = {'a':[1,2,3],
'b':[3,4,5],
'c':[5,6,7]}

4.字典-组成的字典

1
2
3
data = {'Jack':{'math':90,'english':89,'art':78},
'Marry':{'math':82,'english':95,'art':92},
'Tom':{'math':78,'english':67}}

备注:

  1. columns参数可以增加和减少现有列,如出现新的列,值为NaN
  2. index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)
列表创建

1.字典组成的列表

1
2
3
data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]

df = pd.DataFrame(data)

备注:

  1. 由字典组成的列表创建Dataframecolumns为字典的keyindex不做指定则为默认数组标签。
  2. colunmsindex参数分别重新指定相应列及行标签
二维数组创建

语法: B = reshape(A,m,n)

说明: 返回一个mn的矩阵B, B中元素是按列从A中得到的。如果A中元素个数没有mn个, 则会引发错误。

1
2
ar = np.random.rand(9).reshape(3,3)
df = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three'])

备注:

  1. 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定indexcolumns,两者均返回默认数字格式
  2. indexcolunms指定长度与原数组保持一致

时间序列处理

时间模块(包) datatime

主要掌握:datetime.date() / datetime/datetime() / datetime.timedelta()

日期解析 : parser.parse

1.datetime

  • 返回今日 today = datetime.date.today()

t = datetime.date(2006, 6, 1) (年,月,日) → 直接得到当时日期

  • 输出当前时间 now = datetime.datetime.now() 可通过str()转化为字符串

t = datetime.datetime(2014, 1, 1, 12, 44, 33) (年,月,日,时,分,秒) → 至少输入年月日

2.parser.parse

parser.parse:日期字符串转换

  • 导入模块 from dateutil.parser import parse
直接将str转化成datetime.datetime 将字符串类型的时间转换为datetime.datetime类型无法支持中文

parse('2000-1-1')parse('5/1/2014')parse('5/1/2014', dayfirst = True)

parse('22/1/2014')parse('Jan 31, 1997 10:45 PM')

国际通用格式中,日在月之前,可以通过dayfirst来设置


数据处理基本方法

  1. 数值计算和基本统计方法
  2. 文本数据的处理
  3. 数据处理:合并、连接、修补、去重、替换、分组
  4. 透视表、交叉表
  5. 数据读取
喜欢的可以对我小额打赏哦,鼓励小编推出更多优质内容~

本文标题:数据分析 - Pandas

文章作者:Keithx的博客~

发布时间:2018年08月11日 - 22:08

最后更新:2018年10月05日 - 23:10

原始链接:http://edmath.cn/机器学习-人工智能-Pandas.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%
;