最近在做一些真实实验数据的处理,用到了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 数据分析常用技巧相关推荐

  1. pandas数据分析常用的一些方法

    对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常重要的Python包.它不仅提供了很多方法,使得数据处理非常简单,同时在数据处理速度上也做了很多优化,使得和Python内置方法相 ...

  2. 超全的pandas数据分析常用函数总结:上篇

    公众号后台回复"图书",了解更多号主新书内容 作者:雅痞绅士JM 来源:凹凸数据 基础知识在数据分析中就像是九阳神功,熟练的掌握,加以运用,就可以练就深厚的内力,成为绝顶高手自然不 ...

  3. Pandas数据分析常用数据操作(3年总结)

    原创文章,转载请注明来源,谢谢 导入设置 import odps import numpy as np import pandas as pd import matplotlib as mpl imp ...

  4. pandas数据分析使用技巧

    1.被下单数最多商品(item)是什么 c = chipo[['item_name','quantity']].groupby(['item_name'],as_index=False).agg({' ...

  5. Pandas 数据分析 5 个实用小技巧

    Python与算法社区 第443篇原创,干货满满 值得星标 01 02 03 三步加星标 你好,我是 zhenguo 我攥了很久才汇总出这个小技巧系列手册,现暂命名为:<Pandas数据分析小技 ...

  6. 《Python数据分析常用手册》NumPy和Pandas

    转自:https://blog.csdn.net/fu6543210/article/details/80508182 <Python数据分析常用手册>NumPy和Pandas 1.Num ...

  7. Python数据分析小技巧:如何在Pandas中实现数据透视表?

    Python数据分析小技巧:如何在Pandas中实现数据透视表? 数据透视表是数据分析中非常有用的工具,可以帮助我们快速了解数据的结构.关联和趋势.在Pandas中,我们可以使用pivot_table ...

  8. 《python数据分析常用手册》一、NumPy和Pandas篇 ----Good

    come from : https://www.cnblogs.com/prpl/p/5537417.html 一.常用链接: 1.Python官网:https://www.python.org/ 2 ...

  9. Python 全栈 400 之Pandas数据分析练习

    288 Pandas 读取 URL 路径的文件 数据输入路径,可以是文件路径,也可以是 URL,或者实现 read 方法的任意对象. 如下经典的数据集 iris,直接通过 URL 获取. In [16 ...

最新文章

  1. Redis初学:9(Zset类型)
  2. mysql 1236_Mysql主从同步Last_IO_Errno:1236错误解决方法
  3. 这26个阿里 Java 开源项目,你用过几个?
  4. 第2周个人作业:WordCount
  5. C# ThreadPool类(线程池)
  6. 一分钟快速入门openstack
  7. hdu1198 Farm Irrigation —— dfs or 并查集
  8. java digestutils_java-Apache DigestUtils似乎部分错误地计算了MD5
  9. 坚持一个好习惯该有多难?
  10. ASP.NET MVC的ContentResult
  11. [小技巧][Java]Arrays.fill() 初始化 二维数组
  12. Angular实现dialog对话框封装
  13. Unity3d开发IOS游戏 基础
  14. ETH突破620美元关口 日内涨幅为5.36%
  15. 想象力惊人!只凭一句话,AI就能脑补出动漫小片
  16. 任意Android设备上运行测试
  17. 3DMAX烘焙AO步骤
  18. 《算法导论》知识点总结
  19. ArcGIS中输出指定比例尺图片
  20. PHP 函数的完整参考手册

热门文章

  1. Effective Java之用私有构造器或者枚举类型强化Singleton属性(三)
  2. ES6的字符串与正则表达式
  3. DTO(领域数据传输对象)是做什么的
  4. ensp小实验走起来(路由下发、MSTP、VRRP、DHCP、DHCP中继、NAT、链路聚合)之配置
  5. 基因表达式编程gep_基因表达式编程GEP— 前言
  6. next数组_【阿里面试热身题】数组去重(动画展示)
  7. jxl操作excel(合并单元格,设置背景色,字体颜色)
  8. w3c的html4.0规范,W3C HTML4.0学习
  9. python字符串去头尾_悉尼大学某蒟蒻的Python学习笔记
  10. css3小球坠落,CSS3 圆球体内的小球碰撞运动