pandas之基础

简介

Pandas是一个开放源码的Python库,它使用强大的数据结构提供高性能的数据操作和分析工具。

Pandas的主要特点:
	- 快速高效的DataFrame对象,具有默认和自定义的索引。
	- 将数据从不同文件格式加载到内存中的数据对象的工具。
	- 丢失数据的数据对齐和综合处理。重组和摆动日期集。
	- 基于标签的切片,索引和大数据集的子集。
	- 可以删除或插入来自数据结构的列。
	- 按数据分组进行聚合和转换。高性能合并和数据加入。
	- 时间序列功能。

参考: https://www.yiibai.com/pandas/python_pandas_series.html

Series

import pandas as pd
from pandas import Series

1. Series 是能够保存任何类型的数据(整数,字符串,浮点数等)的一维标记数组。轴标签统称为索引。
	- values: 一组数据(ndarray类型)
	- index: 相关的数据索引标签
        
2. 创建
语法: pandas.Series( data, index, dtype, copy)
	- 设置index参数指定显示索引

1) 使用列表创建Series (默认索引为0到N-1的整数型索引)
s1 = Series(data=[1,2,3,4,5])       # 隐式索引
s2 = Series(data=[1,2,3,4,5],index=['a','b','c','d','e'])   # 显示索引

2) 使用numpy创建Series
s3 = Series(data=np.random.randint(0,100,size=(5,)))        # size元组中要求一维 

3) 由字典创建: 不能使用index.但是依然存在默认索引, 且数据源必须为一维数据
    dic = {
        'English': 100,
        'math': 30 }
    Series(data=dic)

Series的索引和切片

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

1. 显式索引:
    - 使用index中的元素作为索引值
    - 使用s.loc[](推荐):注意,loc中括号中放置的一定是显示索引
 注意: 此时是闭区间
    
1) s2[['a','b','c']]      # 显示索引取多个值
2) s2.loc[0:3]

2. 隐式索引:
	- 使用整数作为索引值
	- 使用.iloc[](推荐):iloc中的中括号中必须放置隐式索引
注意: 此时是半开区间
1) s2.iloc[0:3]           # 隐式索引取多个值
2) s2[[0,1,2]]

Series的基本概念

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

1. 向Series增加一行: 相当于给字典增加一组键值对
s2['显示索引'] = value

2. 可以通过shape,size,index,values等得到series的属性
s2.values    # 查看所有的值 : array([1, 2, 3, 4, 5], dtype=int64)

3. 可以使用.head(),.tail()分别查看前n个和后n个值
s2.tail(3)   # 查看后三个值

4. 对Series元素进行去重
s2.unique()

5. 使得两个Series进行相加 (当索引没有对应的值时, 会出现缺失数据显示NaN(not a number))
s = s1 + s2 

6. 使用pd.isnull(),pd.notnull(),或s.isnull(),notnull()函数检测缺失数据
1) s.isnull()     # 空值为True
2) s.notnull()    # 空值为False

Series的运算

1. + - * /

2. add() sub() mul() div() 
s1.add(s2,fill_value=0)

3. Series之间的运算
	- 在运算中自动对齐不同索引的数据
	- 如果索引不对应,则补NaN

DataFrame

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

1.  DataFrame的创建
最常用的方法是用一个字典来创建。DataFrame以字典的键作为【列】的名称,以字典的值(一个数组)作为每一列。
	- DataFrame会自动加上每一行的索引。
	- 使用字典创建的DataFrame后,则columns参数将不可被使用。
	- 同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。
df = DataFrame(data=np.random.randint(60,120,size=(3,3)),index=['a','b','c'],columns=['A','B','C'])

2. DataFrame属性: values、columns、index、shape
df.shape        # 查看形状

3. 利用字典创建
dic = {
    '张三':[150,150,150,150],
    '李四':[0,0,0,0],
}
df = DataFrame(data=dic,index=['语文','数学','英语','理综'])

DataFrame的索引

1. 对列进行索引
	- 通过类似字典的方式    # df['q']
	- 通过属性的方式       # df.q
	可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。
    
1) 修改列索引
df.columns = ['zhangsan','lisi']

2) 获取前两列
df[['lisi','zhangsan']]

2. 对行进行索引
	- 使用.loc[]加index来进行行索引
	- 使用.iloc[]加整数来进行行索引
	同样返回一个Series,index为原来的columns。
    
1) 获取语文的行
df.loc['语文']     

2) 获取第一行
df.iloc[0]

3. 对元素索引的方法
	- 使用列索引
	- 使用行索引(iloc[3,1] or loc['C','q']) 行索引在前,列索引在后
    
1) 查看张三的语文,数学的分数
df.loc[['数学','英语'],'zhangsan']

2) 隐式索引查询
df.iloc[:,1]

切片

4. 切片-> 【注意】直接用中括号时:
	- 索引表示的是列索引
	- 切片表示的是行切片
 
1) 显示索引取前两行
df[0:2]

2) 隐式索引取前两列
df.iloc[:,0:2]

3) 通过索引取出lisi这一列
df['lisi']

4) 通过切片切出前两列
df.loc[:,'zhangsan':'lisi']

5) 通过索引的操作取出语文和数学这两行
df.loc[['语文','数学']]

6) 切片取行
df['语文':'数学']

7) 通过索引取元素
df.loc['语文','zhangsan']

DataFrame的运算

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

示例:
	zhangsan  lisi
语文	145	      0
数学	140	      0
英语	150		  0
理综	133		  0
    
1) 合并两个
qimo = df1 + df2

2) 给张三成绩修改赋值
qimo['zhangsan'] = [145,140,150,133]

3) 查看期中和期末的平均成绩
(qizhong + qimo)/2

4) 修改张三成绩为 0
qizhong.loc['数学','zhangsan'] = 0

5) 期中每个人的成绩加 10分
qizhong = qizhong + 10
posted @ 2019-06-27 10:45  言值  阅读(238)  评论(0编辑  收藏  举报