Python常用库之二:Pandas
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的更多相关文章
- 2,Python常用库之二:Pandas
Pandas是用于数据操纵和分析,建立在Numpy之上的.Pandas为Python带来了两种新的数据结构:Pandas Series和Pandas DataFrame,借助这两种数据结构,我们能够轻 ...
- python 常用库整理
python 常用库整理 GUI 图形界面 Tkinter: Tkinter wxPython:wxPython pyGTK:PyGTK pyQt:pyQt WEB框架 django:django w ...
- Python常用库整理
Python常用库整理 Python中到底有哪些库会让程序员爱不释手?以至于一次上瘾,造成永久性伤害(这句话好像在哪里见过),今天我们就来整理一番这样的库,欢迎各位在评论区或者私信我添加或者修改相关库 ...
- python常用库安装网址
python常用库安装网址如下: http://pypi.python.org/pypi
- windows下python常用库的安装
windows下python常用库的安装,前提安装了annaconda 的python开发环境.只要已经安装了anaconda,要安装别的库就很简单了.只要使用pip即可,正常安装好python,都会 ...
- python常用库
本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...
- Python常用库大全
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- Python常用库大全,看看有没有你需要的
作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- python常用库(转)
转自http://www.west999.com/info/html/wangluobiancheng/qita/20180729/4410114.html Python常用的库简单介绍一下 fuzz ...
随机推荐
- Hadoop源码学习笔记(2) ——进入main函数打印包信息
Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...
- <input>属性为number,maxlength不起作用的解决方案
<input type="text" maxlength="11" /> 效果ok, 当 <input type="number&q ...
- json的省市联动
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 < ...
- ADO.NET对象模型之间的关系
ADO.Net支持两种访问数据的模型:无连接模式和连接模式 无连接模式将数据下载到客户机器上,并在客户机上将数据封装到内存中, 可以向访问本地关系数据库一样访问内存中的数据(例如DataSet), 连 ...
- CentOS6下docker的安装和使用
CentOS6下docker的安装和使用 Docker是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.利用Linux的LXC.AUFS.Go语言.cgroup ...
- 使用jQuery获取Dribbble的内容
Introduction As a web developer, third party API integration is something you will have to face. Esp ...
- vsftpd for Anonymous Downloads on Ubuntu 16.04
Introduction FTP, short for File Transfer Protocol, is a network protocol that was once widely used ...
- 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 ...
- python学习笔记之——正则表达式
1.re模块 Python通过re模块提供对正则表达式的支持,re 模块使 Python 语言拥有全部的正则表达式功能.使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用 ...
- No enum constant org.apache.ibatis.type.JdbcType.Integer
同事今天在用mybatis查询时候,报了上面这个问题.上网查了下,原来是mybatis封装类型的问题.原因是在resultMap中jdbcType写为了Integer,但是在MyBatis中没有这个数 ...