Pandas是用于数据操纵和分析,建立在Numpy之上的。Pandas为Python带来了两种新的数据结构:Pandas Series和Pandas DataFrame,借助这两种数据结构,我们能够轻松直观地处理带标签数据和关系数据。

Pandas功能:

  • 允许为行和列设定标签
  • 可以针对时间序列数据计算滚动统计学指标
  • 轻松处理NaN值
  • 能够将不同的数据集合并在一起
  • 与Numpy和Matplotlib集成

Pandas Series

Pandas series 是像数组一样的一维对象,可以存储很多类型的数据。Pandas series 和 Numpy array之间的主要区别之一是你可以为Pandas series 中的每个元素分配索引标签;另一个区别是Pandas series 可以同时存储不同类型的数据。

创建 Pandas Series

pd.Series(data, index)

 groceries = pd.Series(data=[30, 6, 'yes', 'No'], index=['eggs', 'apples', 'milk', 'bread'])
ser = pd.Series(data=[[0, 1, 2, 3], [1, 3, 5, 7], [2, 4, 6, 8]], index=(['a', 'b', 'c']))

查看 Pandas Series 属性

 # Pandas Series 元素数量
print(groceries.size)
# Pandas Series 形状
print(groceries.shape)
# Pandas Series 维度
print(groceries.ndim)
# Pandas Series 索引列表
print(groceries.index)
# Pandas Series 元素列表
print(groceries.values)

查看是否存在某个索引标签:in

 print('book' in groceries)

访问 Pandas Series 中元素

Pandas Series 提供了两个属性 .loc 和 .iloc

.loc 表明我们使用的是标签索引访问

.iloc 表明我们使用的是数字索引访问

 # 标签索引
print(groceries['eggs'])
print(groceries[['eggs', 'milk']])
# 数字索引
print(groceries[1])
print(groceries[[1, 2]])
print(groceries[-1])
# 明确标签索引
print(groceries.loc['milk'])
print(groceries.loc[['eggs', 'apples']])
# 明确数字索引
print(groceries.iloc[0])
print(groceries.iloc[[0, 1]])

修改和删除 Pandas Series 中元素

直接标签访问,值修改就可

 groceries['eggs'] = 2
print(groceries)

删除:drop(参数 1:lable,标签;参数 2:inplace=True/False,是/否修改原 Series)

 print(ser.drop(['b']))
print(ser.drop(['a', 'b'], inplace=True))

Pandas Series 中元素执行算术运算

Pandas Series执行元素级算术运算:加、减、乘、除

fruits = pd.Series(data=[10, 6, 3], index=['apples', 'oranges', 'bananas'])
# 所有数字进行运算
print(fruits + 2)
print(fruits - 2)
print(fruits * 2)
print(fruits / 2)
# 所有元素应用Numpy中的数学函数
print(np.exp(fruits))
print(np.sqrt(fruits))
print(np.power(fruits, 2))
# 部分元素进行运算
print(fruits[0] - 2)
print(fruits['apples'] + 2)
print(fruits.loc['oranges'] * 2)
print(np.power(fruits.iloc[0], 2))

Pandas DataFrame

Pandas DataFrame 是具有带标签的行和列的二维数据结构,可以存储多种类型的数据,类似于电子表格。

创建 Pandas DataFrame

第一步:创建 Pandas Series 字典

第二步:将字典传递给 pd.DataFrame

 items = {'Bob': pd.Series(data=[245, 25, 55], index=['bike', 'pants', 'watch']),
'Alice': pd.Series(data=[40, 110, 500, 45], index=['book', 'glasses', 'bike', 'pants'])}
shopping_carts = pd.DataFrame(items)
print(shopping_carts)

通过关键字 columns 和 index 选择要将哪些数据放入 DataFrame 中

 shopping_cart = pd.DataFrame(items, index=['bike', 'pants'], columns=['Bob'])
print(shopping_cart)

访问、添加、删除 DataFrame

访问整列:dataframe[['column1', 'column2']]

 # 读取列
print(shopping_carts[['Bob', 'Alice']])

访问整行:dataframe.loc[['row1', 'row2']]

 # 读取行
print(shopping_carts.loc[['bike']])

访问某行某列:dataframe['column']['row'],先提供行标签,将出错。

 # 读取某一列某一行
print(shopping_carts['Bob']['bike'])

添加整列(末尾添加列),空值用 None

 # 添加列
shopping_carts['Mike'] = [10, 30, 10, 90, None]

添加整行(末尾添加行),把新添加行创建为 dataframe,通过 append() 添加

 # 添加行
new_items = [{'Alice': 30, 'Bob': 20, 'Mark': 35, 'Mike': 50}]
new_store = pd.DataFrame(new_items, index=['store3'])
shopping_carts = shopping_carts.append(new_store)

只能删除整列:pop('lable')

 # 删除整列
shopping_carts.pop('Jey')

删除行或者列:drop(['lable1', 'lable2'], axis=0/1)  0表示行,1表示列

 # 删除行
shopping_carts = shopping_carts.drop(['store3', 'watch'], axis=0)

更改行和列标签

rename()

 # 更改列标签
shopping_carts = shopping_carts.rename(columns={'Bob': 'Jey'})
# 更改行标签
shopping_carts = shopping_carts.rename(index={'bike': 'hats'})

处理 NaN

统计 NaN 数量:isnull().sum().sum

 # 数值转化为 True 或者 False
print(store_items.isnull())
# 每一列的 NaN 的数量
print(store_items.isnull().sum())
# NaN 总数
print(store_items.isnull().sum().sum())

统计非 NaN 数量:count(axis=0/1)

 # 每一行非 NaN 的数量,通过列统计
print(store_items.count(axis=1))
# 每一列非 NaN 的数量,通过行统计
print(store_items.count(axis=0))

删除具有NaN值的行和列:dropna(axis=0/1, inplace=True/False)  inplace默认False,原始DataFrame不会改变;inplace为True,在原始DataFrame删除行或者列

 # 删除包含NaN值的任何行
store_items.dropna(axis=0)
# 删除包含NaN值的任何列
store_items.dropna(axis=1, inplace=True)

将 NaN 替换合适的值:fillna()

 # 将所有 NaN 替换为 0
store_items.fillna(value=0)
# 前向填充:将 NaN 值替换为 DataFrame 中的上个值,axis决定列或行中的上个值
store_items.fillna(method='ffill', axis=1)
# 后向填充:将 NaN 值替换为 DataFrame 中的下个值,axis决定列或行中的下个值
store_items.fillna(method='backfill', axis=0)

加载数据

csv 格式文件,每一行都是用逗号隔开:read_csv()

 # 读取 csv 文件,第一行作为列标签
data = pd.read_csv('data.csv')
print(data)
print(data.shape)
print(type(data))

读取前 N 行数据:head(N)

 # 读取头 3 行数据
print(data.head(3))

读取最后 N 行数据:tail(N)

 # 读取后 5 行数据
print(data.tail(5))

检查是否有任何列包含 NaN 值:isnull().any()  类型 bool

 # 检查任何列是否有 NaN 值,返回值:bool
print(data.isnull().any())

数据集的统计信息:describe()

 # 获取 DataFrame 每列的统计信息:count,mean,std,min,25%,50%,75%,max
# 25%:四分之一位数;50%:中位数;75%:四分之三位数
print(data.describe())
# 通过统计学函数查看某个统计信息
print(data.max())
print(data.median())

数据相关性:不同列的数据是否有关联,1 表明关联性很高,0 表明数据不相关。corr()

 # 数据相关性
print(data.corr())

数据分组:groupby(['lable1', 'lable2'])

 # 按年份分组,统计总薪资
data.groupby(['Year'])['Salary'].sum()
# 按年份分组,统计平均薪资
data.groupby(['Year'])['Salary'].mean()
# 按年份,部门分组,统计总薪资
data.groupby(['Year', 'Department'])['Salary'].sum()

Python常用库之二:Pandas的更多相关文章

  1. 2,Python常用库之二:Pandas

    Pandas是用于数据操纵和分析,建立在Numpy之上的.Pandas为Python带来了两种新的数据结构:Pandas Series和Pandas DataFrame,借助这两种数据结构,我们能够轻 ...

  2. python 常用库整理

    python 常用库整理 GUI 图形界面 Tkinter: Tkinter wxPython:wxPython pyGTK:PyGTK pyQt:pyQt WEB框架 django:django w ...

  3. Python常用库整理

    Python常用库整理 Python中到底有哪些库会让程序员爱不释手?以至于一次上瘾,造成永久性伤害(这句话好像在哪里见过),今天我们就来整理一番这样的库,欢迎各位在评论区或者私信我添加或者修改相关库 ...

  4. python常用库安装网址

    python常用库安装网址如下: http://pypi.python.org/pypi

  5. windows下python常用库的安装

    windows下python常用库的安装,前提安装了annaconda 的python开发环境.只要已经安装了anaconda,要安装别的库就很简单了.只要使用pip即可,正常安装好python,都会 ...

  6. python常用库

    本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...

  7. Python常用库大全

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  8. Python常用库大全,看看有没有你需要的

    作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. python常用库(转)

    转自http://www.west999.com/info/html/wangluobiancheng/qita/20180729/4410114.html Python常用的库简单介绍一下 fuzz ...

随机推荐

  1. Hadoop源码学习笔记(2) ——进入main函数打印包信息

    Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...

  2. <input>属性为number,maxlength不起作用的解决方案

    <input type="text" maxlength="11" /> 效果ok, 当 <input type="number&q ...

  3. json的省市联动

    1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 < ...

  4. ADO.NET对象模型之间的关系

    ADO.Net支持两种访问数据的模型:无连接模式和连接模式 无连接模式将数据下载到客户机器上,并在客户机上将数据封装到内存中, 可以向访问本地关系数据库一样访问内存中的数据(例如DataSet), 连 ...

  5. CentOS6下docker的安装和使用

    CentOS6下docker的安装和使用 Docker是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.利用Linux的LXC.AUFS.Go语言.cgroup ...

  6. 使用jQuery获取Dribbble的内容

    Introduction As a web developer, third party API integration is something you will have to face. Esp ...

  7. vsftpd for Anonymous Downloads on Ubuntu 16.04

    Introduction FTP, short for File Transfer Protocol, is a network protocol that was once widely used ...

  8. Install guide for OpenLDAP and GOsa 2 on Ubuntu & Debian

    First we will install OpenLDAP by running the command as root: apt-get install slapd ldap-utils ldap ...

  9. python学习笔记之——正则表达式

    1.re模块 Python通过re模块提供对正则表达式的支持,re 模块使 Python 语言拥有全部的正则表达式功能.使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用 ...

  10. No enum constant org.apache.ibatis.type.JdbcType.Integer

    同事今天在用mybatis查询时候,报了上面这个问题.上网查了下,原来是mybatis封装类型的问题.原因是在resultMap中jdbcType写为了Integer,但是在MyBatis中没有这个数 ...