numpy的神奇广播函数
在使用pandas的时候,一般来说对两个DataFrame(简写df)的加减乘除,会自动索引对齐,很方便,DataFrame与Series之间的运算也会沿着指定的轴进行广播。最为人称道的广播形式大概就是apply和applymap这样的操作了,很方便,很强大。
但是也有不能满足需求的时候,比如一个DataFrame根据另一个DataFrame对应的元素进行自定义ufunc操作的时候,就不能满足了。庆幸的是numpy提供了一个广播函数,可以自定义广播函数,然后对两个DataFrame对应位置元素进行自定义操作。
1.pandas元素级操作
pandas的元素级操作是对每个元素进行相同的操作,比如格式转换,判断是否为空等。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.DF根据另一个DF进行操作
对A的每个元素,根据B的相同位置的元素进行相应的操作。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3.DF根据另一个DF进行操作
两个df除了加减乘除外的操作怎么办呢?比如A中的元素是否包含在B中对应元素呢?或者将A、B的对应元素转成字符串然后进行其他操作呢。
这里就用到了numpy的ufunc函数,可以自定义广播函数,然后对每个元素进行相同的操作。
frompyfunc
,把Python里的函数(可以是自写的)转化成ufunc,用法是frompyfunc(func, nin, nout)
,其中func是需要转换的函数,nin是函数的输入参数的个数,nout是此函数的返回值的个数。
注意:frompyfunc函数无法保证返回的数据类型都完全一致,因此返回一个中间类型object,需要再次obj.astype(np.float64)之类将其元素类型强制调齐。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7