求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
Pandas 教程
1. Pandas 是什么
2.Pandas库下载和安装
3.Pandas Series入门教程
4.Pandas DataFrame入门教程
5.Pandas Panel三维数据结构
6.Python Pandas描述性统计
7.Pandas使用自定义函数
8.Pandas reindex重置索引
9.Pandas iteration遍历
10.Pandas sorting排序
11.Pandas去重函数:drop_duplicates()
12.Python Pandas处理字符串(方法详解)
13.Pandas设置数据显示格式
14.Pandas loc/iloc用法详解
15.Python Pandas统计函数
16.Python Pandas窗口函数
17.Python Pandas聚合函数
18.Python Pandas缺失值处理
19.Pandas groupby分组操作详解
20.Pandas merge合并操作
21.Pandas concat连接操作
22.Python Pandas时间序列
23.Pandas日期时间格式化
24.Padans Timedelta时间差
25.Pandas随机选择样本
26.Pandas数据重采样
27.Python Pandas分类对象
28.Python Pandas绘图
29.Python Pandas读取文件
30.Pandas csv读写文件
31.Pandas Excel读写操作
32.Pandas index操作索引
33.Pandas分层索引入门教程
34.Pandas执行SQL操作
35.Pandas和NumPy的比较
36.Pandas使用的注意事项
 

 
Pandas使用自定义函数
20 次浏览
 

如果想要应用自定义的函数,或者把其他库中的函数应用到 Pandas 对象中,有以下三种方法:

  • 1) 操作整个 DataFrame 的函数:pipe()
  • 2) 操作行或者列的函数:apply()
  • 3) 操作单一元素的函数:applymap()

如何从上述函数中选择适合的函数,这取决于函数的操作对象。下面介绍了三种方法的使用。

操作整个数据表

通过给 pipe() 函数传递一个自定义函数和适当数量的参数值,从而操作 DataFrme 中的所有元素。下面示例,实现了数据表中的元素值依次加 3。

首先自定义一个函数,计算两个元素的加和,如下所示:

def adder(ele1,ele2):
return ele1+ele2

然后使用自定义的函数对 DataFrame 进行操作:

df = pd.DataFrame(np.random.randn(4,3),columns=['c1','c2','c3'])
#传入自定义函数以及要相加的数值3
df.pipe(adder,3)

完整的程序,如下所示:

import pandas as pd
import numpy as np
#自定义函数
def adder(ele1,ele2):
return ele1+ele2
#操作DataFrame
df = pd.DataFrame(np.random.randn(4,3),columns=['c1','c2','c3'])
#相加前
print(df)
#相加后
print(df.pipe(adder,3))

输出结果:

         c1        c2        c3
0  1.989075  0.932426 -0.523568
1 -1.736317  0.703575 -0.819940
2  0.657279 -0.872929  0.040841
3  0.441424  1.170723 -0.629618
         c1        c2        c3
0  4.989075  3.932426  2.476432
1  1.263683  3.703575  2.180060
2  3.657279  2.127071  3.040841
3  3.441424  4.170723  2.370382

如果要操作 DataFrame 的某一行或者某一列,可以使用 apply() 方法,该方法与描述性统计方法类似,都有可选参数 axis,并且默认按列操作。示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
#默认按列操作,计算每一列均值
print(df.apply(np.mean))

输出结果:

col1    0.277214
col2    0.716651
col3   -0.250487
dtype: float64

传递轴参 axis=1, 表示逐行进行操作,示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print(df)
print (df.apply(np.mean,axis=1))

输出结果:

       col1      col2      col3
0  0.210370 -0.662840 -0.281454
1 -0.875735  0.531935 -0.283924
2  1.036009 -0.958771 -1.048961
3 -1.266042 -0.257666  0.403416
4  0.496041 -1.071545  1.432817

0   -0.244641
1   -0.209242
2   -0.323908
3   -0.373431
4    0.285771
dtype: float64

求每一列中,最大值与最小值之差。示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print(df.apply(lambda x: x.max() - x.min()))

输出结果:

col1    3.538252
col2    2.904771
col3    2.650892
dtype: float64

操作单一元素

DataFrame 数据表结构的 applymap() 和 Series 系列结构的 map() 类似,它们都可以接受一个 Python 函数,并返回相应的值。

示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
#自定义函数lambda函数
print(df['col1'].map(lambda x:x*100))

输出结果:

0    -18.171706
1      1.582861
2     22.398156
3     32.395690
4   -133.143543
Name: col1, dtype: float64

下面示例使用了 applymap() 函数,如下所示:

import pandas as pd
import numpy as np
#自定义函数
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
print(df.applymap(lambda x:x*10))
print(df.apply(np.mean))

输出结果:

        col1       col2       col3
0  -1.055926   7.952690  15.225932
1   9.362457 -12.230732   7.663450
2   2.910049  -2.782934   2.073905
3 -12.008132  -1.444989   5.988144
4   2.877850   6.563894   8.192513
#求均值:
col1    0.041726
col2   -0.038841
col3    0.782879
dtype: float64

您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



20 次浏览