【学习笔记】python数据分析-Pandas
目录
- pandas数据结构
- 创建Series数据
- 创建DataFrame数据
- pandas的索引操作
- 重新索引
- 更换索引
- 索引选取
- 选取行
- 选取列
- 布尔选择
- pandas的增删改
- 增加行或列
- 删除行或列
- 修改行或列索引标签
- pandas的运算
- 算术运行
- 函数
- 排序
- 汇总统计
- pandas的简单可视化
- 线形图
- 条形图
- 直方图&密度图
- 散点图
pandas数据结构
pandas有两个基本数据结构:Series,DataFrame
Series类似一维数组,不同的是他是由一组数据和一组索引组成。
DataFrame是python数据分析最常用的,所以不管创建的数据或外部的数据,我们都会想办法将其转换为DataFrame数据
创建Series数据
通过Series函数,输入列表数据作参可以创建最简单的Series数据
from pandas import Series,DataFrame
import pandas as pd
obj1=Series([1,-2,3,-4])
obj2=Series([1,-5,-9,8],index=['a','b','c','d'])
#可以指定索引来创建Series
print(obj1)
print(obj1.shape)
print(obj1.ndim)
print(obj1.size)
运行结果如下:
也可以通过字典创建Series数据
from pandas import Series,DataFrame
data={'bob':98,'john':86,'mike':70,'tony':100
}
obj=Series(data)
obj.name='math'
#Series对象可以重命名
obj.index.name='student'
#索引可以重命名
print(obj)
运行结果如下:
创建DataFrame数据
创建DataFrame数据的方法有很多,最常用的就是传入由数组ndarray,列表list或元组tupe组成的字典,实例如下
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
data={'name':['ZhangSan','LiSi','WangWu','XiaoMing'],'sex':['female','male','female','female'],'year':[2001,2002,2005,1999],'city':['Beijing','Shanghai','Guangzhou','Beijing']
}
df=DataFrame(data,columns=['name','sex','year','city'], index=['a','b','c','d'])
#通过column指定列索引的顺序
print(df)
运行结果如下:
pandas的索引操作
重新索引
索引对象是无法修改的,但是可以通过reindex() 对Series数据和DataFrame数据重新索引,Series数据重新索引实例如下:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
obj1=Series([1,-2,3,-4],index=[0,2,3,5])
print(obj1)
obj2=obj1.reindex(range(6),method='ffill')
#method表示填充方法,参数可以设置ffill前填充,bfill后填充
print(obj2)
运行结果如下:
DataFrame数据也可以对行索引,列索引 重新索引
df1=DataFrame(np.arange(9).reshape(3,3),index=['a','b','d'],columns=['name','id','sex'])
print(df1)
df2=df1.reindex(['a','b','c','d'],fill_value=0)
#fill_value可以指定填充值
#重新索引columns需要在新索引前加columns=['name','city','sex']
print(df2)
运行结果如下:
更换索引
可以通过set_index(‘columns’)来将列数据作为行索引,实例如下:
df1=DataFrame(np.arange(9).reshape(3,3),index=['a','b','d'],columns=['name','id','sex'])
print(df1)
df2=df1.set_index('name')
print(df2)
#可以通过df2.reset_index()重新恢复
运行结果如下:
索引选取
在pandas中数据选取都是通过索引完成,所以这个内容很重要。
选取行
series数据选取可以索引位置或者索引标签进行
[0] 第1行
[0:2] 第1-2行(左闭右开)
[‘a’] 索引标签为a的行
[‘a’:‘d’]索引标签为a-d的行(左闭右闭)
obj=Series([1,-5,-9,8],index=['a','b','c','d'])
print(obj)
obj[['c','d']]=[23,15]
print(obj[['c','d']])
运行结果如下:
DataFrame数据除了像Series数据那样选取行外,还可以通过loc[ ’ ’ ] 或者iloc[ ‘ ’ ]选择单独行
print(df)
print(df.loc['a'])
#loc['']输入的参数是行索引标签
print(df.iloc[[1,3]])
#iloc[[]]输入的参数是行索引位置
运行结果如下:
选取列
通过一个中括号[ ]输入索引标签,如df[‘name’]可以单独选择某列
通过两个中括号[[ , ]]输入多个索引标签,如df[[‘name’,‘sex’,‘city’]]可以选择多列
!!切片用于选取行数据,不能选取列
df=DataFrame(data,columns=['name','sex','year','city'], index=['a','b','c','d'])
print(df)
print(df['name'])
print(df[['name','sex']])
运行结果如下:
布尔选择
布尔选择用于选择特定值,类似excel中的筛选功能,常用符号等于==
不等于!=
负号-
和&
或 |
print(df)
print([df['sex']=='male'])
print(df[df['sex']=='male'])
运行结果如下:
pandas的增删改
增加行或列
原数据上增加行数据可以通过append函数传入字典
print(df)
new_data={'name':'Bob','city':'Nanjing','sex':'male','year':2003
}
df=df.append(new_data,ignore_index=True)
#Can only append a Series if ignore_index=True or if the Series has a name
print(df)
运行结果如下:
增加列信息更为简单,不需要什么函数,直接传入新列表or数值即可
print(df)
df['math']=[50,80,78,96,85]
#用数值传入也可以,如df['math']=100
print(df)
运行结果如下:
删除行或列
通过drop函数
print(df)
new_drop=df.drop('year',axis=1)
#删除列指定列索引标签,指定axis=1
print(new_drop)
运行结果如下:
修改行或列索引标签
print(new_drop)
new_drop.rename(index={0:'a',1:'b'}, columns={'math':'Math'},inplace=True)
#区别与set_index
print(new_drop)
运行结果如下:
pandas的运算
算术运行
pandas数据对象在算术运算时,如果有相同索引(index&column)则进行算术运算,如果有没有则引入缺失值。
df1=DataFrame(np.arange(9).reshape(3,3),columns=['a','b','c'],index=['apple','tea','milk'])
print(df1)
df2=DataFrame(np.arange(9).reshape(3,3),columns=['a','b','c'],index=['apple','tea','coco'])
print(df2)
print(df1+df2)
#必须行索引和列索引都相同才进行运算,否则填入NaN
运行结果如下:
函数
定义好的函数可以用于pandas数据中,这是一个数据分析常用的工具;一般有三种方法:
函数 | 用法 |
---|---|
map函数 | 套用在series(列)中的每个元素 |
apply函数 | 套用在DataFrame中的行与列 |
applymap函数 | 套用在DataFrame中的每个元素 |
下面是实例:
data={'fruits':['apple','orange','banana','grape'],'price':['25元','30元','18元','45元']
}
#需要把price中的元去掉
df1=DataFrame(data)
print(df1)
def f(x):return x.split('元')[0]
df1['price']=df1['price'].map(f)
#f(x)输入X,返回去除’元‘的数值。利用map函数将f(x)应用到price列中的每一个元素
print(df1)
运行结果如下:
applymap和map都是应用与每个元素,数据分析操作常用到
df=DataFrame(np.random.randn(3,3),columns=['a','b','c'],index=['win','mac','app'])
print(df)
df1=df.applymap(lambda x:'%.2f'%x)
#lambda是一个匿名函数,x为lambda的参数,并作:后的运算
#applymap可以用于DataFrame中的每个元素,可以批量处理数据
print(df1)
运行结果如下:
排序
数据分析中常需要对某列数据排序,然后取前几位
用df.sort_values(by=‘column’, ascending=False/True)
实例如下:
data={'name':['Bob','Mike','Tony','Jany','White'],'city':['Beijing','US','Shanghai','Guangzhou','Shunde'],'Math':[80,90,88,58,100]
}
df=DataFrame(data).set_index('name')
print(df)
print(df.sort_values(by='Math',ascending=False)[:2])
运行结果如下
汇总统计
汇总统计也在数据分析实际用很多,比如求唯一值,值出现次数统计,求和等等
df=DataFrame(np.random.randn(9).reshape(3,3),columns=['a','b','c'])
print(df)
print(df.sum())
#默认axis=0按行方向求和,可以传入axis=1作参
运行结果如下:
df.value_counts()可以统计每个值出现的次数
print(df)
print(df['Math'].value_counts())
运行结果如下:
在Series数据中(如果是DataFrame需要先选取一列),通过unique获取不重复的数组,输出是ndarray格式
print(df)
print(df['Math'].unique())
#'DataFrame' object has no attribute 'unique',需要先选取某列才能用unique
运行结果如下:
pandas的简单可视化
pandas中集成matplotlib中的基础组件,可以快速绘图用以检查异常数据,
线形图
通过df.plot()
plt.show()可以绘制折线图
df=DataFrame({'normal':np.random.normal(size=100),'gamma':np.random.gamma(1,size=100),'poisson':np.random.poisson(size=100)})
df1=df.cumsum()
print(df1)
df1.plot()
#画折线图,如果是DataFrame格式则会为每一列绘制一条线;也可以指定列进行绘图
plt.show()
#打印折线图
图像如下:
条形图
df.plot()中传入kind=‘bar’ or kind='barh’函数即可绘制柱状图,水平柱状图
df=DataFrame(data,columns=['name','sex','year','city'], index=['a','b','c','d'])
print(df)
df['sex'].value_counts().plot(kind='bar')
#这个选取列数据,统计值频次,画图的方法常用
plt.show()
图像如下:
直方图&密度图
直方图和密度图都可以用于统计数值分布,在pandas中
直方图 : s.hist (bins=, grid=True/ False) 其中bins是将值分成多少段,grid是网格线
密度图 : s.plot( kind= ‘kde’)
注意的是直方图和密度图都是针对一列数据或series数据
散点图
散点图 s.plot( kind= ‘scatter’ )
实例如下:
df=DataFrame(np.arange(10), columns=['x'])
df['y']=2*df['x']+5
print(df)
df.plot(kind='scatter',x='x',y='y')
plt.show()
图像如下:
写在最后:本文记录《从零开始学python数据分析》-罗攀编著 的个人学习笔记,供linlin和大家查阅,有误请指正。
【学习笔记】python数据分析-Pandas相关推荐
- python绘制直方图的函数_(六)pyplot基础图表函数(学习笔记)|python数据分析与展示...
1.pyplot基础图表函数概述 2.pyplot图饼的绘制 3.pyplot直方图的绘制 4.pyplot极坐标图的绘制 5.pyplot散点图的绘制 6.单元小结 [网页链接[Python数据分析 ...
- 学习笔记-python数据分析-环境配置
系统win10 64位 miix5 512G 由于装双系统比较复杂,且miix在网上还没有发现成功的案例(本身就小众,即便ubuntu是通用的系统,也会存在驱动的问题) 1.安装最新版python3. ...
- python数据挖掘学习笔记】十.Pandas、Matplotlib、PCA绘图实用代码补充
#2018-03-23 18:56:38 March Friday the 12 week, the 082 day SZ SSMR https://blog.csdn.net/eastmount/a ...
- Python数据分析pandas之多层高维索引
Python数据分析pandas之多层高维索引 DataFrame多层索引 多层索引简介 众所周知Pandas的Series和DataFrame存放的是一维和二维数组,那么想存放多维数组就得通过多层索 ...
- Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表
系列文章目录 Chapter 1:创建与探索DF.排序.子集化:Python数据分析--Pandas基础入门+代码(一) Chapter 2:聚合函数,groupby,统计分析:Python数据分析- ...
- Python数据分析pandas之分组统计透视表
Python数据分析pandas之分组统计透视表 数据聚合统计 Padans里的聚合统计即是应用分组的方法对数据框进行聚合统计,常见的有min(最小).max(最大).avg(平均值).sum(求和) ...
- Python数据分析pandas之数据拼接与连接
Python数据分析pandas之数据拼接与连接 数据拼接处理 数据拼接处理指的是numpy.pandas里对数据的拼接.连接.合并等多种方法的概称.有时我们处理的数据会分很多步骤,而中间或者最终的结 ...
- Python数据分析pandas之dataframe初识
Python数据分析pandas之dataframe初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上 ...
- Python数据分析pandas之series初识
Python数据分析pandas之series初识 声明与简介 pandas是一个基于python的.快速的.高效.灵活.易用的开源的数据处理.分析包(工具)..pandas构建在numpy之上,它通 ...
- 二维码学习笔记(二) | 数据分析与数据编码
唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...
最新文章
- Visual Studio Code 常用快捷键
- Android 搜索框 search dialog 和 search widget
- pyqt5教程12:拖放功能
- [粉丝福利]--感谢你们关注!
- 唐尼vr眼镜好吗_裸眼3DVR和全息投影有什么区别 他们之间谁更好一些
- Ubuntu 18.04/18.10快速开启Google BBR的方法
- php怎么防止爬虫,PHP语言学习之php 防止爬虫设置
- 傅里叶变换和拉普拉斯变换
- matlab怎么画两个自变量的图_er图怎么画?轻松绘制专业er图的软件
- c语言同余法随机数,线性同余法取随机数
- android录屏直播方案,安卓手机录屏直播软件怎么用?
- Axure插件axure-chrome-extension安装
- 微信小程序60s倒计时
- 关闭chrome 的内置PDF 查看器
- workerman php使用,workerman怎么用
- Java jsp导出Excel打开报格式或扩展名错误
- 极速office(excel)如何查找出重复内容
- Perl-Can't locate Time/HiRes.pm 错误
- PTA-520钻石争霸赛题解【c/c++ 完整思路+代码】
- 【愚公系列】2022年10月 微信小程序-电商项目-确认订单功能实现