pandas 数据分析常用技巧
最近在做一些真实实验数据的处理,用到了pandas库,也着着实实感受到了pandas的魅力,这篇博客做个总结以及扩展。
Pandas基于两种数据类型:series与dataframe。series是一个一维的数据类型,其中每一个元素都有一个标签,标签可以是数字或者字符串;一个dataframe是一个二维的表结构,Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项.
- 数据读取以及基本预处理
# 以下是一些比较常规的起始处理import pandas as pd
data_path = './data.xls'
df = pd.read_excel(data_path, sheet_name=0, header=0) # 注意如果表中没有header,则header=None# 正则表达式用于修改列名
regex = re.compile(pattern='[\u4e00-\u9fa5|a-zA-Z]{1,}[(]?[\u4e00-\u9fa5]?[)]?')
column_names = [regex.search(i).group() for i in df.columns.values.tolist()]
df.columns = column_names# 数据类型转换
df[column_names[1:]] = df[column_names[1:]].apply(pd.to_numeric)# 设置其中某一列为index列,并转换类型
df.set_index(['列名'], inplace=True)
df.index = df.index.astype(str)df.sort_index(ascending=False)
df.reset_index(drop=True) # 使index列从0开始排列df.to_csv('path')
# 或则 df.to_excel()
# 或则 df.to_dict()
实用方法
pd.options.display.float_format = '{:, .3f}'.formatdf.head(n) # 查看前n个记录 df.tail(n) # 查看后n个记录df.describe() # 包含多种统计信息,如均值,方差等 len(df) # 记录的条数df.sum(axis=1) # 统计函数 df.mean(axis=0) df.max() df.min() df.std()# 重新给记录排列顺序,即打乱数据 df.sample(frac=1).reset_index(drop=True)
获取DataFrame行数据
import pandas as pd data=[[1,2,3],[4,5,6]] index=['a','b']#行号 columns=['c','d','e']#列号 df=pd.DataFrame(data,index=index,columns=columns)
loc——通过行标签索引行数据
df.loc['a'] # 返回index值为 'a' 的一行, <class 'pandas.core.series.Series'>
iloc——通过行号索引行数据
df.iloc[0] # <class 'pandas.core.series.Series'>
df.iloc[0].values # <class 'numpy.ndarray'>
df.iloc[0].values.tolist() # class list
ix——通过行标签或者行号索引行数据(基于loc和iloc 的混合)
df.ix[0] # <class 'pandas.core.series.Series'>
df.ix['a'] # <class 'pandas.core.series.Series'>
- 获取DataFrame列数据
df.loc[:,'c':'d']df.iloc[:,0:2]df.ix[:,'c':'d']df.ix[:,0:2]# 需要注意的是结果都为
'''c d
a 1 2
b 4 5
'''df['列名']
df.列名
- 数据归一化
df_norm = df.apply(lamda x: (x-np.mean(x))/(np.std(x))) # 返回归一化数据
- 过滤
# boolean masking 技术
# 筛选信息技术基础>85份, 基础化学小于93分的同学
df[(df['信息技术基础']>85) & (df['基础化学']<93)]# 筛选某字段是以某子串开头的记录
df[ df['列名'].str.startswith('some-thing')]
- apply、applymap、map
apply()是一种让函数作用于列或者行操作;
df.apply(func=lambda x: x.max()-x.min(), axis=1) # 1表示行;0表示列
applymap()是一种让函数作用于DataFrame每一个元素的操作;
df.applymap(func=lambda x: x-1) # 使每个元素都减1操作
map是一种让函数作用于Series每一个元素的操作
df['列名'].map(lambda x: x-1) # 使某一列每个元素减1操作
合并数据集
df = pd.DataFrame([[1, 2, 3, 4],[5, 6, 7, 8]])df2 = pd.DataFrame([[1, 99, 98],[5, 69, 78]])# merge函数用于合并, on 可以指定数字(index)或列名df = df.merge(df2, on=[0])print(df)"""0 1_x 2_x 3 1_y 2_y 0 1 2 3 4 99 98 1 5 6 7 8 69 78"""
快速作图
pandas这个简单的功能还是很给力的,可以用一用, pandas关于绘图还有不少其他方面,下次有机会我做个总结,这里简单一点,点到为止:
df = pd.DataFrame([[1, 2, 3],[3, 4, 6],[5, 6, 6],[7, 8, 8],[9, 10, 9]],columns=['a', 'b', 'c'],index=[1, 2, 3, 4, 5])# print(df)import matplotlib.pyplot as pltdf.plot(x=0, y=[1, 2])plt.show()
筛选
import pandas as pd import numpy as npa=np.array([[1,2,3],[4,5,6],[7,8,9]]) df1=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC')) df2=df1.copy() # 重新开辟一个空间存储一份和df1一样的数据
删除/选取某行含有特定数值的行
df1[df1['A'].isin([1])] # 选取df1中A列包含数字1的行 df1[~df1['A'].isin([1])] #通过~取反,选取不包含数字1的行
删除/选取某行含有特定数值的列
cols=[x for i,x in enumerate(df2.columns) if df2.iat[0,i]==3] # #利用enumerate对row0进行遍历,将含有数字3的列放入cols中 df2[cols] 选取含有特定数值的列 df2.drop(cols,axis=1) #利用drop方法将含有特定数值的列删除
pandas 数据分析常用技巧相关推荐
- pandas数据分析常用的一些方法
对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常重要的Python包.它不仅提供了很多方法,使得数据处理非常简单,同时在数据处理速度上也做了很多优化,使得和Python内置方法相 ...
- 超全的pandas数据分析常用函数总结:上篇
公众号后台回复"图书",了解更多号主新书内容 作者:雅痞绅士JM 来源:凹凸数据 基础知识在数据分析中就像是九阳神功,熟练的掌握,加以运用,就可以练就深厚的内力,成为绝顶高手自然不 ...
- Pandas数据分析常用数据操作(3年总结)
原创文章,转载请注明来源,谢谢 导入设置 import odps import numpy as np import pandas as pd import matplotlib as mpl imp ...
- pandas数据分析使用技巧
1.被下单数最多商品(item)是什么 c = chipo[['item_name','quantity']].groupby(['item_name'],as_index=False).agg({' ...
- Pandas 数据分析 5 个实用小技巧
Python与算法社区 第443篇原创,干货满满 值得星标 01 02 03 三步加星标 你好,我是 zhenguo 我攥了很久才汇总出这个小技巧系列手册,现暂命名为:<Pandas数据分析小技 ...
- 《Python数据分析常用手册》NumPy和Pandas
转自:https://blog.csdn.net/fu6543210/article/details/80508182 <Python数据分析常用手册>NumPy和Pandas 1.Num ...
- Python数据分析小技巧:如何在Pandas中实现数据透视表?
Python数据分析小技巧:如何在Pandas中实现数据透视表? 数据透视表是数据分析中非常有用的工具,可以帮助我们快速了解数据的结构.关联和趋势.在Pandas中,我们可以使用pivot_table ...
- 《python数据分析常用手册》一、NumPy和Pandas篇 ----Good
come from : https://www.cnblogs.com/prpl/p/5537417.html 一.常用链接: 1.Python官网:https://www.python.org/ 2 ...
- Python 全栈 400 之Pandas数据分析练习
288 Pandas 读取 URL 路径的文件 数据输入路径,可以是文件路径,也可以是 URL,或者实现 read 方法的任意对象. 如下经典的数据集 iris,直接通过 URL 获取. In [16 ...
最新文章
- Redis初学:9(Zset类型)
- mysql 1236_Mysql主从同步Last_IO_Errno:1236错误解决方法
- 这26个阿里 Java 开源项目,你用过几个?
- 第2周个人作业:WordCount
- C# ThreadPool类(线程池)
- 一分钟快速入门openstack
- hdu1198 Farm Irrigation —— dfs or 并查集
- java digestutils_java-Apache DigestUtils似乎部分错误地计算了MD5
- 坚持一个好习惯该有多难?
- ASP.NET MVC的ContentResult
- [小技巧][Java]Arrays.fill() 初始化 二维数组
- Angular实现dialog对话框封装
- Unity3d开发IOS游戏 基础
- ETH突破620美元关口 日内涨幅为5.36%
- 想象力惊人!只凭一句话,AI就能脑补出动漫小片
- 任意Android设备上运行测试
- 3DMAX烘焙AO步骤
- 《算法导论》知识点总结
- ArcGIS中输出指定比例尺图片
- PHP 函数的完整参考手册
热门文章
- Effective Java之用私有构造器或者枚举类型强化Singleton属性(三)
- ES6的字符串与正则表达式
- DTO(领域数据传输对象)是做什么的
- ensp小实验走起来(路由下发、MSTP、VRRP、DHCP、DHCP中继、NAT、链路聚合)之配置
- 基因表达式编程gep_基因表达式编程GEP— 前言
- next数组_【阿里面试热身题】数组去重(动画展示)
- jxl操作excel(合并单元格,设置背景色,字体颜色)
- w3c的html4.0规范,W3C HTML4.0学习
- python字符串去头尾_悉尼大学某蒟蒻的Python学习笔记
- css3小球坠落,CSS3 圆球体内的小球碰撞运动