Pandas的数据结构

导入pandas:  
三剑客

import pandas as pd
from pandas import Series,DataFrame
import numpy as np

1、Series

Series是一种类似与一维数组的对象,由下面两个部分组成:

values:一组数据(ndarray类型)
index:相关的数据索引标签

1)Series的创建

两种创建方式:

(1) 由列表或numpy数组创建

默认索引为0到N-1的整数型索引

#使用列表创建Series
Series(data=[1,2,3,4,5]) 0 1
1 2
2 3
3 4
4 5
dtype: int64
#使用numpy创建Series
Series(data=np.random.randint(1,40,size=(5,)),index=['a','d','f','g','t'],name='bobo') a 3
d 22
f 35
g 19
t 21
Name: bobo, dtype: int32 还可以通过设置index参数指定索引

(2) 由字典创建:不能在使用index.但是依然存在默认索引

注意:数据源必须为一维数据

dic = {
'语文':100,
'英语':99
}
s = Series(data=dic)
s
语文    100
英语 99
dtype: int64

2)Series的索引和切片

可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的是一个Series类型)。

(1) 显式索引:

- 使用index中的元素作为索引值
- 使用s.loc[](推荐):注意,loc中括号中放置的一定是显示索引

注意,此时是闭区间

s.iloc[1]

99

(2) 隐式索引:

- 使用整数作为索引值
- 使用.iloc[](推荐):iloc中的中括号中必须放置隐式索引

注意,此时是半开区间

切片:隐式索引切片和显示索引切片

  • 显示索引切片:index和loc
s.iloc[0:2]

语文    100
英语 99
dtype: int64 隐式索引切片:整数索引值和iloc

3)Series的基本概念

可以把Series看成一个定长的有序字典

向Series增加一行:相当于给字典增加一组键值对

可以通过shape,size,index,values等得到series的属性

s.index
Index(['语文', '英语'], dtype='object') s.values
array([100, 99], dtype=int64) 可以使用s.head(),tail()分别查看前n个和后n个值 s.head(1) 语文 100
dtype: int64

去重

对Series元素进行去重

s = Series(data=[1,1,2,2,3,3,4,4,4,4,4,5,6,7,55,55,44])
s.unique() array([ 1, 2, 3, 4, 5, 6, 7, 55, 44], dtype=int64)
当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况

使得两个Series进行相加:索引与之对应的元素会进行算数运算,不对应的就补空

s1 = Series([1,2,3,4,5],index=['a','b','c','d','e'])
s2 = Series([1,2,3,4,5],index=['a','b','f','c','e'])
s = s1+s2
s a 2.0
b 4.0
c 7.0
d NaN
e 10.0
f NaN
dtype: float64
可以使用pd.isnull(),pd.notnull(),或s.isnull(),notnull()函数检测缺失数据

s.notnull()

a     True
b True
c True
d False
e True
f False
dtype: bool s[s.notnull()] a 2.0
b 4.0
c 7.0
e 10.0
dtype: float64

4)Series的运算

1) + - * /

(2) add() sub() mul() div() : s1.add(s2,fill_value=0)
s1.add(s2) a 2.0
b 4.0
c 7.0
d NaN
e 10.0
f NaN
dtype: float64

(3) Series之间的运算


  • 在运算中自动对齐不同索引的数据
  • 如果索引不对应,则补NaN

2、DataFrame

 
DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。

行索引:index
列索引:columns
值:values

1)DataFrame的创建

最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。

此外,DataFrame会自动加上每一行的索引。

使用字典创建的DataFrame后,则columns参数将不可被使用。

同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。

  • 使用ndarray创建DataFrame
 
DataFrame(data=np.random.randint(0,100,size=(5,6)))

    0    1    2    3    4    5
0 32 93 0 23 21 40
1 27 35 9 76 41 68
2 63 96 63 30 96 51
3 2 50 28 26 26 41
4 32 74 97 84 56 7
DataFrame属性:values、columns、index、shape

df.values
array([[77, 67],
[88, 88],
[99, 99],
[90, 78]], dtype=int64) df.index
Index(['语文', '数学', '英语', '理综'], dtype='object')
使用ndarray创建DataFrame:创建一个表格用于展示张三,李四,王五的java,python的成绩
dic = {
'张三':[77,88,99,90],
'李四':[67,88,99,78]
}
df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
df 张三 李四
语文 77 67
数学 88 88
英语 99 99
理综 90 78

2)DataFrame的索引

(1) 对列进行索引

- 通过类似字典的方式  df['q']
- 通过属性的方式 df.q

可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。

df

张三    李四
语文 77 67
数学 88 88
英语 99 99
理综 90 78 df['张三'] 语文 77
数学 88
英语 99
理综 90
Name: 张三, dtype: int64 df.张三 语文 77
数学 88
英语 99
理综 90
Name: 张三, dtype: int64 df[['李四','张三']] 李四 张三
语文 67 77
数学 88 88
英语 99 99
理综 78 90
#修改列索引
df.columns = ['zhangsan','lisi']
df zhangsan lisi
语文 77 67
数学 88 88
英语 99 99
理综 90 78

(2) 对行进行索引

- 使用.loc[]加index来进行行索引
- 使用.iloc[]加整数来进行行索引

同样返回一个Series,index为原来的columns。

df.iloc[[0,1]]

zhangsan    lisi
语文 77 67
数学 88 88

(3) 对元素索引的方法

- 使用列索引
- 使用行索引(iloc[3,1] or loc['C','q']) 行索引在前,列索引在后
df.iloc[0,1]
67

切片:

注意】 直接用中括号时:

  • 索引表示的是列索引
  • 切片表示的是行切片
df[0:2]

zhangsan    lisi
语文 77 67
数学 88 88 在loc和iloc中使用切片(切列) : df.loc['B':'C','丙':'丁'] df.iloc[:,0:1] zhangsan
语文 77
数学 88
英语 99
理综 90

3)DataFrame的运算

(1) DataFrame之间的运算

同Series一样:

  • 在运算中自动对齐不同索引的数据
  • 如果索引不对应,则补NaN
练习6:

假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。

假设张三期中考试数学被发现作弊,要记为0分,如何实现?

李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?

后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
df 

    zhangsan    lisi
语文 87 177
数学 10 198
英语 109 209
理综 100 188 df.loc['数学','zhangsan'] = 0 df['lisi'] += 100 df += 10 (df+df)/2 zhangsan lisi
语文 77 67
数学 88 88
英语 99 99
理综 90 78


数据分析三剑客 numpy,oandas,matplotlib(2)的更多相关文章

  1. 数据分析三剑客 numpy,oandas,matplotlib

    数据分析: 是不把隐藏在看似杂乱无章的数据域背后的信息提炼出来,总结出所研究对象内在规律 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩 ...

  2. python数据分析基础——numpy和matplotlib

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2假如有如下几组体重和身高数据,让求每组数据的BMI值: w ...

  3. 数据分析之Numpy、Matplotlib库

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 菜鸟教程:https://www.run ...

  4. python数据分析之numpy、matplotlib的使用

    5.3 Python的科学计算包 - Numpy numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算.这个库的前身是1995年就开始开发的一 ...

  5. Python——数据分析,Numpy,Pandas,matplotlib

    由于图片内容太多,请拖动至新标签页再查看

  6. 数据分析 之 NumPy

    目录 简单了解数据分析 Python数据分析三剑客(Numpy,Pandas,Matplotlib) 简单使用np.array() 使用np的routines函数创建数组 ndarray N维数组对象 ...

  7. 数据分析三剑客之numpy

    Numpy 简介 数据分析三剑客:Numpy,Pandas,Matplotlib NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算, ...

  8. python数据分析三剑客之: Numpy

    数据分析三剑客之: Numpy 一丶Numpy的使用 ​ numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...

  9. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

随机推荐

  1. SQL注入:DNS注入

    DNS注入原理: 通过我们构造的数据,访问搭建好的DNS服务器,查看DNS访问的日志即可获取我们想要得到的数据. DNS注入使用场景: 在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起请求,这 ...

  2. .deb 包如何安装到指定目录; Ubuntu; Debian like;

    有时候,我们没有root用户的时候,我们进行安装deb包就不能之间安装到系统之中了: 为了方便,我们可以直接解压 dpkg -x same.deb .; 直接解压到当前目录,然后在配置环境变量,即可启 ...

  3. Educational Codeforces Round 71 (Rated for Div. 2)

    传送门 A.There Are Two Types Of Burgers 签到. B.Square Filling 签到 C.Gas Pipeline 每个位置只有"高.低"两种状 ...

  4. 使用 github pages快速部署自己的静态网页

    看见很多大神在Github Pages上部署Demo,感觉效果还不错,刚才自己也试了一下,发现其实并不难! 选择 github pages 的理由 使用零成本: github pages 集成在 gi ...

  5. LDAP认证

    1.LDAP介绍 LDAP,(Light Directory Access Protocol),基于X.500标准的轻量级目录访问协议,类似于目录服务一样,是一个为查询浏览和搜索的数据库,优势在于他的 ...

  6. 什么是CSS?它的特点有哪些?

    css 中文名称:层叠样式表,也称级联样式表 英文名称:Cascading Style Sheets 最新的版本:css3 1.层叠性 在权重(优先级)相同的情况下,同一个标签的样式发生冲突, 最后定 ...

  7. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 3

    18.3  PDO的安装 PDO随PHP 5.1版本发行,在PHP 5的PECL扩展中也可以使用.PDO需要PHP 5版本核心面向对象特性的支持,所以它无法在之前的PHP版本中运行.无论如何,在配置P ...

  8. javascript检索某个字符或字符串在源字符串中的位置(下标)

    indexOf()方法 JavaScript中的String对象提供了一个indexOf(searchValue, fromIndex)方法用于检索某个字符或字符串在源字符串中第一次出现的位置(下标) ...

  9. python-3.8.0 新特性之赋值表达式

    [python-3.8.0 新特性之赋值表达式] 赋值表达式的语法是这样的“ name := expression ”,形式上看和赋值语句 “ = ” 差不多,就作用上来看也雷同.也就是说 “:=” ...

  10. Python - ^在正则表达式中的作用

    ^在正则表达式中有两个作用,一是表达以什么开头,二是表达对什么取反.有时候经常傻傻的分不清楚,接下来给大家详细介绍该怎么用这个^准备一个python文件test.py,借用re.search函数举例说 ...