1、数据迭代

1.1 迭代行

(1)df.iterrows()

  for index, row in df[0:5].iterrows():  #需要两个变量承接数据
print(row)
print("\n")

  for index, row in df[0:5].iterrows():
print(row.team) #通过对象属性方式
print(row['name']) #通过字典方式读取具体列
print("\n")

(2)df.iertuples()

  #生成一个nametuples类型的数据,默认name为Pandas(可在参数中指定)

  for row in df[0:5].itertuples():
print(row,"\n")

  for row in df[0:5].itertuples():
print(row.name,"\n") #可以通过元素属性的方式取出具体值

1.2 迭代列

(1)df.iteritems()、df.items()

  # df.items(),df.iteritems() 迭代时返回(列名,本列的series结构数据)

  for label, item in df[0:5].items():  #label是列名
print(label,item)
print("\n")

  for label, item in df[0:5].items():
print(item) #item的数据结构是series(有行索引,和数据)
print("\n")

  for label, colunm in df[0:5].items():
print(colunm.sort_values()) #数据结构是series(有行索引,和数据)因此可以使用series的方法
print("\n")

(2)对dataframe直接进行迭代

  for item in df:
print(item) #item会得到df的列名
print("\n")

  for item in df:
print(df[item]) #item会得到df的列名,通过df[item]又可以得到每个列的值
print("\n")

2、函数应用

2.1 pipe()

  #将复杂的调用简化,语法结构为df.pipe(<函数名>,<参数列表或字典>)
#ta将dataframe或series作为函数的第一个参数 #定义一个函数,给所有季度的成绩加n,然后增加一个平均数 def add_mean(df,n):
n_df = df.copy()
n_df = n_df.loc[:,'Q1':'Q4'] + n
n_df['avg'] = n_df.sum(1) return n_df add_mean(df,100) #此时原本的df没变

  df.pipe(add_mean,100) #运行结果与上图一致

  #函数部分还可以使用lambda

  df.pipe(lambda df,x,y: df[(df.Q1>x) & (df.Q2 >y)],60,70)  #选出df中同时满足Q1>60,Q2>70的数据

2.2 apply()

  #apply(),对df按行和列(默认逐列传入)进行函数处理,也支持series(传入具体值)

  #将name转换为全小写
df.name.apply(lambda x : x.lower())

  #计算每个季度的平均成绩,计算方法为去掉一个最高分和去掉一个最低分

  def avg(s ):
min = s.min()
max = s.max()
average = (s.sum()-min-max)/ (s.count()-2)
return average df.select_dtypes(include='number').apply(avg)

  #计算每个学生的平均成绩

  df1 = df.set_index('name')
df1.select_dtypes(include='number').apply(avg)

  #与np.where()配合使用 np.where(逻辑表达式,替换值1,替换值2)

  df.apply(lambda x: (x.team=='A') & (x.Q1>90), axis=1).map({True:'GOOD',False:'Other'})

2.3 applymap()

  #applymap(),对dataframe或者series的所有元素(不包括索引)应用函数处理

  #使用lambda时,变量是指具体的值

  #例子:计算每个数据的长度

  df.applymap(lambda x:len(str(x)))

2.4 map()

  #map()根据输入对应关系映射值返回最终数据

  #可传入一个人字典(键为原值,值为新值)
#可传入一个函数(参数为series的每个值) df.team.map({'A':'一班','B':'二班','C':'三班','D':'四班'}) #没有映射值的会被填为NAN

  df.team.map('I am a {}'.format)  #传入格式化表达式来格式化数据内容

  df.Q1.map('11{}'.format) #数字会被转为字符

2.5 agg()

  #agg使用指定轴上的一项或多项操作进行汇总
#可以传入一个函数挥着函数的字符 #每列的最大值
df.agg('max')

  #将所有列聚合产生sum和min两行
#传入多个函数 df.agg(['sum','min'])

  #序列多个聚合
df.agg({'Q1':['sum','min'],'Q2':['sum','max']})

  #分组后聚合

  df.groupby('team').agg('max')

  #支持每个列分别用不同的方法聚合
#支持指定轴的方向 #1、不同列使用不同的方法进行聚合 df.agg(最大值=('Q1',max),
最小值=('Q2',min),
平均值=('Q3',np.mean),
求和=('Q4',lambda x :x.sum())
)

  #2、按行聚合
df.loc[:,'Q1':'Q4'].agg(np.mean,axis=1)

2.6 transform()

  #datafram或者series自身调用函数,并返回一个与自身长度相同的数据

  #1、应用匿名函数
df.transform(lambda x:x*2) #字符串会变成重复两遍,数字会*2

  #调用多个函数

  df.transform([np.sqrt,np.exp]) #自动筛选数字列,并应用

3、参考文献

《深入浅出Pandas》

pandas:数据迭代、函数应用的更多相关文章

  1. Jq_Ajax 操作函数跟JQuery 遍历函数跟JQuery数据操作函数

    JQuery文档操作方法 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据. 函数                             ...

  2. 【summary】JQuery 相关css、ajax、数据操作函数或方法

    总结一下JQuery常用的函数方法,更加系统的整理一下. JQuery遍历的一些函数: 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集 ...

  3. pandas小记:pandas数据输入输出

    http://blog.csdn.net/pipisorry/article/details/52208727 数据输入输出 数据pickling pandas数据pickling比保存和读取csv文 ...

  4. pandas DataFrame apply()函数(1)

    之前已经写过pandas DataFrame applymap()函数 还有pandas数组(pandas Series)-(5)apply方法自定义函数 pandas DataFrame 的 app ...

  5. pandas DataFrame.shift()函数

    pandas DataFrame.shift()函数可以把数据移动指定的位数 period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列. eg: 有这样一个DataFrame ...

  6. pandas 数据预处理

    pandas 数据预处理 缺失数据处理 csv_data=''' A,B,C,D 1.0,2.0,3.0,4.0 5.6,6.0,,8.0 0.0,11.0,12.0,,''' import pand ...

  7. Pandas数据规整

    Pandas数据规整 数据分析和建模方面的大量编程工作都是用在数据准备上的,有时候存放在文件或数据库中的数据并不能满足数据处理应用的要求 Pandas提供了一组高级的.灵活的.高效的核心函数和算法,它 ...

  8. Python的工具包[1] -> pandas数据预处理 -> pandas 库及使用总结

    pandas数据预处理 / pandas data pre-processing 目录 关于 pandas pandas 库 pandas 基本操作 pandas 计算 pandas 的 Series ...

  9. Python之pandas数据加载、存储

    Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 利用Web API操作网络资源 1. 读 ...

随机推荐

  1. 正则系列——JavaScript正则表达式入门心得

    我发现有个别字符被这个编辑器给刷掉了,但是灰色区域显示正常,以灰色区域代码为准 什么玩意? 在我刚开始学习编程的时候,就听过正则了,也听说正则很牛逼,懂正则的更牛逼.但是苦于没有人指点,也没有使用正则 ...

  2. Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 报错及解决办法

    亲测Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 解决办法 - 程序员大本营 ...

  3. Blazor组件自做六 : 使用JS隔离封装Baidu地图

    1. 运行截图 演示地址 2. 在文件夹wwwroot/lib,添加baidu子文件夹,添加baidumap.js文件 2.1 跟上一篇类似,用代码方式异步加载API,脚本生成新的 body > ...

  4. Qt QComboBox之setEditable和currentTextChanged及其源码分析

    目录 Qt QComboBox之setEditable和currentTextChanged以及其源码分析 前言 问题的出现 问题分析 currentTextChanged信号触发 源码分析 Qt Q ...

  5. spring-xml实现aop-通知的种类

    如果本代码有疑问,请访问spring-aop快速入门或者spring-aop动态代理技术(底层分析) 1.导入aop的相关坐标 <dependency> <groupId>or ...

  6. ASMCMD-8102: no connection to Oracle ASM

    通过ASMCMD命令连接ASM,Connected to an idle instance [root@shdb02 ~]# su - oracle [oracle@shdb02 ~]$ asmcmd ...

  7. Druid 1.1.24 在控制台打印"discard long time none received connection. , jdbcUrl : jdbc:mysql://...."错误日志

    Druid 1.1.24 在控制台打印"discard long time none received connection. , jdbcUrl : jdbc:mysql://...&qu ...

  8. Js中的三个错误语句:try、catch、throw

    Js中的三个错误语句:try.catch.throw

  9. el-tree小知识点

    <el-tree ref="tree" :props="props" :data="initData" node-key=" ...

  10. 关于Jupyter Notebook无法自动补全(Autocompletion),报错TypeError: __init__() got an unexpected keyword argument 'column' 的解决方案

    关于Jupyter Notebook无法自动补全(Autocompletion),报错TypeError: __init__() got an unexpected keyword argument ...