专栏首页机器学习与统计学Python数据分析之pandas基本数据结构

Python数据分析之pandas基本数据结构

Python数据分析之numpy数组全解析 Python数据分析之Pandas读写外部数据文件

目录

1引言

2 Series数组

2.1 Series数组构成

2.2 创建Series数组

2.3 Series数组常用属性

3 DataFrame数组

3.1 DataFrame数组构成

3.2 创建DataFrame数组

3.3 DataFrame数组的常用属性

4 总结

1引言

本文总结Pandas中两种常用的数据类型:

(1)Series是一种一维的带标签数组对象。

(2)DataFrame,二维,Series容器

2 Series数组

2.1 Series数组构成

Series数组对象由两部分构成:

值(value):一维数组的各元素值,是一个ndarray类型数据。索引(index):与一维数组值一一对应的标签。利用索引,我们可非常方便得在Series数组中进行取值。如下所示,我们通过字典创建了一个Series数组,输出结果的第一列就是索引,第二列就是数组的具体值。

>>> import pandas as pd
>>> a =pd.Series([102, 212, 332, 434])
>>> a
0 102
1 212
2 332
3 434
dtype: int64

也可以在创建时手动指定索引:

>>> a = pd.Series([102, 212, 332, 434], index=['第一列', '第二列', '第三列', '第四列'])
>>> a
第一列 102
第二列 212
第三列 332
第四列 434
dtype: int64

利用索引,我们可以更加方便得在数组中进行取值:

>>> a['第一列']
102
>>> a[['第一列', '第二列']]
第一列 102
第二列 212
dtype: int64

当然,你也可以使用以往的数字下标从数组中取值:

>>> a[0]
102
>>> a[[0,1]]
第一列 102
第二列 212
dtype: int64

2.2 创建Series数组

(1)通过list、tuple创建

>>> pd.Series([123, 321, 345,543]) # 传入一个list
0 123
1 321
2 345
3 543
dtype: int64
>>> pd.Series((123, 321, 345,543)) # 传入一个元组
0 123
1 321
2 345
3 543
dtype: int64

(2)通过传入一维numpy数组对象创建

>>> import numpy as np
>>> n = np.arange(3) # 创建一个一维的numpy数组
>>> pd.Series(n)
0 0
1 1
2 2
dtype: int32

注意:传入的numpy必须是一维的数组,否则会报错。

>>> n = np.arange(6).reshape((2,3))
>>> pd.Series(n)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
……
packages\pandas\core\internals\construction.py", line 729, in sanitize_array
raise Exception("Data must be 1-dimensional")
Exception: Data must be 1-dimensional

(3)通过传入字典创建

通过字典创建Series数组时,字典的key会自动被设置成Series数组的索引:

>>> pd.Series({'name':'张三', 'age':40, 'weight':140})
name 张三
age 40
weight 140
dtype: object

(4)通过传入一个标量值创建

当传入一个标量值时,必须传入index索引,Series会根据传入的index参数来确定数组对象的长度:

>>> a = pd.Series(10, index=['a', 'b', 'c', 'd'])
>>> a
a 10
b 10
c 10
d 10
dtype: int64

2.3 Series数组常用属性

Series数组的属性与numpy数组属性很是类似,如下表所示:

3 DataFrame数组

3.1 DataFrame数组构成

DataFrame数组是Pandas中另一种数据结构,其数据的呈现方式类似于Excel这种二维表结构。相比于Series数组,DataFrame可以存放多维数据,所以DataFrame不仅仅有索引,还有列名,如下所示:

>>> d = {'one': [1, 2, 3, 4], 'two':['一', '二', '三', '四']}
>>> pd.DataFrame(d)
one two
0 1 一
1 2 二
2 3 三
3 4 四
>>> df.index
RangeIndex(start=0, stop=4, step=1)
>>> df.columns
Index(['one', 'two'], dtype='object')

可以看到,DataFrame数组可以包含多维数据,类似于一张二维表。与Series类似,DataFrame数组也有一个index索引,在不指定索引时,通常会自动生成从零开始步长为1的索引。此外DataFrame数组还有一个列名,索引和列名是从数组中挑选数据的重要依据。

3.2 创建DataFrame数组

(1)通过字典创建

通过字典来创建DataFrame数组时,字典的键将会自动成DataFrame数组的列名,字典的值必须是可迭代对象,例如Series、numpy数组、list、tuple等,不同Series数组中对应的缺失值pandas将自动填充NaN:

以list列表为值的字典:

>>> d = {'one': [1, 2, 3, 4], 'two':['一', '二', '三', '四']}
>>> pd.DataFrame(d)
one two
0 1 一
1 2 二
2 3 三
3 4 四

以numpy数组为值得字典:

>>> d = {'zero': np.zeros((3,)), 'ones': np.ones((3,)), 'twos':np.full((3,),2)}
>>> pd.DataFrame(d)
zero ones twos
0 0.0 1.0 2
1 0.0 1.0 2
2 0.0 1.0 2

以Series为值的字典:

>>> 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) # 创建DataFrame数组
>>> df
one two
a 1.0 1.0
b 2.0 2.0
c 3.0 3.0
d  NaN 4.0

无论是上面那种类型对象为值的字典,都可以通过下面的方式重新指定列索引:

>>> pd.DataFrame(d, index=['d', 'b', 'a'])
one two
d NaN 4.0
b 2.0 2.0
a 1.0 1.0

当然,也可以在手动指定列名,不过行索引对应的键数据才会传入新建的数组中:

>>> pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])
two three
d 4.0 NaN
b 2.0 NaN
a 1.0 NaN

(2)通过列表创建

通过列表创建DataFrame数组时,列表的每一个元素必须是字典,这样,字典的键将作为列名。

>>> d = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
>>> pd.DataFrame(d)
a b c
0 1 2 NaN
1 5 10 20.0
>>> pd.DataFrame(d, index=['第一行', '第二行']) # 重新指定索引
a b c
第一行 1 2 NaN
第二行 5 10 20.0

(3)通过功能函数创建

我们还可以通过诸如from_dict()、from_records()这类的功能函数来创建DataFrame数组,以from_dict()为例:

>>> d = {'A': [1, 2, 3], 'B': [4, 5, 6]}
>>> pd.DataFrame.from_dict(d)
A B
0 1 4
1 2 5
2 3 6

如果需要让字典的键作为索引,重新指定列名,可以传入orient='index'参数,然后重新传入列名:

>>> pd.DataFrame.from_dict(d,orient='index', columns=['one', 'two', 'three'])
one two three
A 1 2 3
B 4 5 6

3.3 DataFrame数组的常用属性

DataFrame数组的属性与Series数据几乎一样,只是多了一个保存列名信息的columns属性,参看上面表格中的Series属性就行了。

4 总结

本文大致介绍了Pandas中的两种重要数据结构Series数组对象和DataFrame数组对象的特点、主要创建方法、属性。

作者:奥辰

https://www.cnblogs.com/chenhuabin/p/11436012.html

本文分享自微信公众号 - 机器学习与统计学(tjxj666),作者:奥辰

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【数据分析 R语言实战】学习笔记 第十一章 对应分析

    在很多情况下,我们所关心的不仅仅是行或列变量本身,而是行变量和列变量的相互关系,这就是因子分析等方法无法解释的了。1970年法国统计学家J.P.Benzenci...

    统计学家
  • 15分钟进击Kaggle大赛top2%

    读者朋友们,你们好,我是Abhay Pawar,平时热衷于参加一些机器学习的比赛,不知道你以前有没有听过kaggle比赛,如果你参加过就会知道这个比赛是非常有趣...

    统计学家
  • 【NumPy学习指南】day4 多维数组的切片和索引

    ndarray支持在多维数组上的切片操作。为了方便起见,我们可以用一个省略号(...)来

    统计学家
  • 生存分析详细解读

    探究变量之间的关系是数据挖掘中的一个基本分析内容,对于常规的离散型或者连续型变量,有很多的方法可以用于挖掘其中的关系,比如线性回归,逻辑回归等等。然而有一类数据...

    生信修炼手册
  • Pandas基础用法合集(中文官档)

    head() 与 tail() 用于快速预览 Series 与 DataFrame,默认显示 5 条数据,也可以指定要显示的数量。

    Datawhale
  • Windows Phone 7 SDK 7.1 Beta2 发布

        早上看到消息,有Marketplace账号的筒子们注意了,可以去下载芒果的ROM了,一个开发者账号只能更新一个WP7,以下是App hub上的消息...

    ShiJiong
  • 基于 HTML5 结合互联网+ 的 3D 隧道

    目前,物资采购和人力成本是隧道业发展的两大瓶颈。比如依靠民间借贷,融资成本很高;采购价格不透明,没有增值税发票;还有项目管控和供应链管理的问题。成本在不断上升,...

    HT_hightopo
  • MADlib——基于SQL的数据挖掘解决方案(24)——分类之决策树

    决策树(Decision Tree)又称为分类树(Classification Tree),是最为广泛的归纳推理算法之一,处理类别型或连续型变量...

    用户1148526
  • python及numpy,pandas易混淆的点

    初接触python觉得及其友好(类似matlab),尤其是一些令人拍案叫绝不可思议的简单命令就可以完成非常复杂的计算,但是真正接触一下就发现,python比ma...

    用户1332428
  • Android架构(一)MVP全解析

    前言 关于架构的文章,博主很早就想写了,虽说最近比较流行MVVM,但是MVP以及MVC也没有过时之说,最主要还是要根据业务来选择合适的架构。当然现在写MVP的文...

    用户1269200

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动