pandas是python下强大的数据分析和探索工具,是的python在处理数据时非常快速、简单。它是构建在numpy之上的,包含丰富的数据处理函数,支持时间序列分析功能,支持灵活处理缺失数据。

pandas基础

# 安装
pip install pandas

pandas 基本的数据结构是 Series 和 DataFrame 。Series 就是序列,类似一维数组;DataFrame 则是相当于一张二维的表格,类似二维数组,它的每一列都是一个 Series 。每个 Series 都会带有一个对应的 Index ,用来标记不同的元素,Index 的内容可以是字母、数字、中文等。

Series

import numpy as np
import pandas as pd # 创建Series方法
方法1:s1 = pd.Series([1, 2, 3, 4])
方法2:s2 = pd.Series(np.arange(10)) # 通过numpy.arange创建
方法3:s3 = pd.Series({'':1, '':2, '':3}) # 通过字典创建
方法4:s4 = pd.Series([1, 2, 3, 4], index=['A', 'B', 'C', 'D']) # 创建时设置索引 s1.values # 查看值
s1.index # 查看索引

DataFrame

from pandas import Series, DataFrame
s1 = s2 = s3 = Series([1, 2, 3])
df = DataFrame([s1, s2, s3], index=['A','B','C'], columns=[0, 1, 2])
print(df) # DataFrame 包含 index 和 column,分别为行索引和列索引
out:
0 1 2
A 1 2 3
B 1 2 3
C 1 2 3 df.index # 查看行索引
df.column # 查看列索引

pandas实用操作

I/O操作(df1表示DataFrame格式数据).

1、从粘贴板读取
df1.to_clipboard() #写入粘贴板
pd.read_clipboard() # 复制后执行命令,即可读取到粘贴板中信息 2、CSV文件
df1.to_csv('名字.csv',index=False) # false则表示不添加索引号
pd.read_csv('df1.csv') # 读取CSV文件 3、json
df1.to_json() # 转化成json文件
pd.read_json(df1.to_json()) # 读取json文件 4、html
df1.to_html('df1_html') # 转换成HTML文件 5、excel
df1.to_excel('df1.xlsx') # 生成Excel文件

查看数据(df1表示DataFrame格式数据)

df1.head() # 返回前五行
df1.tail() # 返回后五行
# 返回更多的内容则在括号中写出来,不写则默认为五行 df1.iloc[:,:] # 索引切片,定位,基于index,与索引名无关
df1.loc[:,:] # 根据索引名来,label来过滤 # 取列(column)
df1[] # 直接写column名便取得对应列,若要取多列,中括号内可以写个列表,eg:['A', 'B'] df1.T # 转置
df1.describe() # 快速查看数据的统计概要,包括count、mean、std、min等 # 排序
df1.sort_index(axis=1, ascending=False) # 按轴排序,axis表示轴(0为列,1为行),ascending表示正反序
df1.sort_values(by='') # by后写column,表示按该column值排序

数据运算

在 pandas 中运算会自动对齐 index 和 column 。下面举例说明。

在 Series 中,两个Series相加,会自动对齐索引,当索引没有时,则为NaN,NaN与任何数相加都为NaN,因此会出现图中【5】的结果,fill_value是将两个Series中的缺失项先填充,再进行相加运算。DataFrame数据同理,下面不加以赘述。

缺失值

缺失值可以用 numpy.nan 来表示,NaN 具有传染性,换句话说就是与 NaN 进行运算的结果都是 NaN 。对于含有 NaN 的普通函数计算结果均为 NaN,例如:

a = numpy.array([2, 3, 1, numpy.nan, 4])

numpy.sum(a)\numpy.min(a)\numpy.max(a)等均为NaN

# 但是其有安全模式,也就是忽略其中的 NaN 进行运算
numpy.nansum(a)\numpy.nanmin(a)\numpy.nanmax(a) 均会在已有数据中求相应的和,最大最小值

缺失值的发现

data.isnull()
data.notnull()
# 均返回布尔值

缺失值的去除

data.dropna(axis=0,how='any',thresh=None)
# axis表示行和列0,1来表示
# how为any时表示有Nan就删掉,为all时表示全为nan时才删掉
# thresh表示一个界限,超过这个数字的nan则被删掉

缺失值的填充

data.fillna(axis=0, method=ffill)  # 或者参数只填一个数,即用该数字填充
axis 坐标轴,行或列
method 填充方式
ffill:forward-fill 从前向后填充
bfill:backward-fill 从后向前填充

合并(merge)

结合(concat)
pandas.concat(df1, df2, df3) 连接(join)
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval':[1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval':[1, 2]})
pd.merge(left, right, on="key")
out:
key lval rval
0 foo 1 4
1 foo 1 5
2 foo 2 4
3 foo 2 5 追加(append)
data1.append(data2, ignore_index=True)

数据透视表(Pivot Tables)

当分析庞大的数据时,为了更好的发掘数据特征之间的关系,且不破坏原数据,就可以利用透视表 `pivot_table` 进行操作。

新建表将 `A, B, C` 列作为索引进行聚合。
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
'B': ['A', 'B', 'C'] * 4,
'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
'D': np.random.randn(12),
'E': np.random.randn(12)}) pd.pivot_table(df, index=['A', 'B']) 1、透视表按指定行进行聚合
将该 DataFrame 的 `D` 列聚合,按照 `A, B` 列为索引进行聚合,聚合的方式为默认求均值。
pd.pivot_table(df, values=['D'], index=['A', 'B']) 2、透视表聚合方式定义
上一题中 `D` 列聚合时,采用默认求均值的方法,若想使用更多的方式可以在 `aggfunc` 中实现。
pd.pivot_table(df, values=['D'], index=['A', 'B'], aggfunc=[np.sum, len]) 3、透视表利用额外列进行辅助分割
`D` 列按照 `A, B` 列进行聚合时,若关心 `C` 列对 `D` 列的影响,可以加入 `columns` 值进行分析。
pd.pivot_table(df, values=['D'], index=['A', 'B'],
columns=['C'], aggfunc=np.sum) 4、透视表的缺省值处理
在透视表中由于不同的聚合方式,相应缺少的组合将为缺省值,可以加入 `fill_value` 对缺省值处理。
pd.pivot_table(df, values=['D'], index=['A', 'B'],
columns=['C'], aggfunc=np.sum, fill_value=0)

python数据分析工具 | pandas的更多相关文章

  1. python数据分析工具——Pandas、StatsModels、Scikit-Learn

    Pandas Pandas是 Python下最强大的数据分析和探索工具.它包含高级的数据结构和精巧的工具,使得在 Python中处理数据非常快速和简单. Pandas构建在 Numpy之上,它使得以 ...

  2. Python数据分析工具:Pandas之Series

    Python数据分析工具:Pandas之Series Pandas概述Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建.Pandas纳入大量库和标准数据模型,提供高效的操作数 ...

  3. Python数据分析库pandas基本操作

    Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...

  4. Python数据分析之pandas基本数据结构:Series、DataFrame

    1引言 本文总结Pandas中两种常用的数据类型: (1)Series是一种一维的带标签数组对象. (2)DataFrame,二维,Series容器 2 Series数组 2.1 Series数组构成 ...

  5. Python 数据分析:Pandas 缺省值的判断

    Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...

  6. 数据分析工具Pandas

        参考学习资料:http://pandas.pydata.org 1.什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analys ...

  7. 数据分析工具pandas简介

    什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis). Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建 ...

  8. python数据分析工具安装集合

    用python做数据分析离不开几个好的轮子(或称为科学棧/第三方包等),比如matplotlib,numpy, scipy, pandas, scikit-learn, gensim等,这些包的功能强 ...

  9. Python数据分析之Pandas操作大全

    从头到尾都是手码的,文中的所有示例也都是在Pycharm中运行过的,自己整理笔记的最大好处在于可以按照自己的思路来构建矿建,等到将来在需要的时候能够以最快的速度看懂并应用=_= 注:为方便表述,本章设 ...

随机推荐

  1. logback日志大量写磁盘导致微服务不能正常响应的解决方案

    最近几天,遇到一个莫名其妙的问题,每天几乎同一时段微服务自己跑着跑着就假死了,过几个小时就又自动恢复了. 通过对定时任务.网卡.内存.磁盘.业务日志的排查分析,只有磁盘的IO在假死前一段时间偏高,经查 ...

  2. android手机卫士、3D指南针、动画精选、仿bilibli客户端、身份证银行卡识别等源码

    Android精选源码 android身份证.银行卡号扫描源码 android仿bilibili客户端 android一款3D 指南针 源码 android手机卫士app源码 android提醒应用, ...

  3. C语言中传值和C++的传引用

    在C语言中,传址其实也时传值的一种,首先地址其实也时可以看做是一个值来进行传递的. 在C++中有一种说法叫传引用,就是&变量名. 比如: /* * 传值 int a = 3; void fun ...

  4. django框架进阶-中间件-长期维护

    ##################    为什么使用中间件?      ####################### 先说几个需求, 1,url的白名单,url=[ "XX"] ...

  5. 解密优秀博士成长史 ——微软亚洲研究院首届博士生学术论坛Panel讨论经验总结

    --微软亚洲研究院首届博士生学术论坛Panel讨论经验总结" title="解密优秀博士成长史 --微软亚洲研究院首届博士生学术论坛Panel讨论经验总结"> 编者 ...

  6. HttpClient简介与案例分析

    HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 jav ...

  7. zoj2588-tarjan求桥/割边

    tarjan求桥,算法流程详见核心代码: void tarjan(int k){ dfn[k]=low[k]=++cnt; //fa[k]=(edge){f,0,fid}; for(int i=hea ...

  8. 一、美国国家经济研究局NBER教育经济研究项目工作论文合集

    一.美国国家经济研究局NBER教育经济研究项目工作论文合集 (一)项目地址: American National Bureau of Economic Research - Economics of ...

  9. proxmox新版本使用了lxc容器,导致以前的vzlist命令无法使用,于是自己写了一个脚本来获取所有半虚拟化主机的信息状态

    #!/usr/bin/env python #encoding:utf-8 # desc:用来描述各个主机信息 import os #CTID NPROC STATUS IP_ADDR HOSTNAM ...

  10. leetcode第24题:两两交换链表中的节点

    通过分析,这属于数据结构类型题目,但涉及到多次交换,也需要算法知识. 首先,我想的是,将链表中节点相互交换. class Solution: def swapPairs(self, head: Lis ...