这个应该是非常实用的!!!
公式越复杂,pandas越比Excel好用;
下面是一个计算长方形外接圆面积的例子:
import pandas as pd
import numpy as np
# 定义复杂函数
def gei_circumcircle_area(w, h):
'''
求外接圆面积的公式
:param w: 宽
:param h: 高
:return: 外接圆面积
'''
# 计算圆的半径
r = np.sqrt(w ** 2 + h ** 2) / 2
return r ** 2 * np.pi
# 定义一个装饰函数
def wrapper(row):
# 因为pandas是一行一行进行扫描,然后把数据作为一个列表传给函数
return gei_circumcircle_area(row['width'], row['height'])
df = pd.read_excel('data/复杂函数计算.xlsx', index_col='ID')
# 增加外接圆面积列
df['外接圆面积'] = df.apply(wrapper, axis=1)
print(df)
装饰函数有时候容易引起误解;
尤其是本来需要传参,但是在apply里面似乎并没有参数传给wrapper,那么我只能猜测apply自动提供了传参;
如果觉得不习惯,还可以使用lambda表达式,尽管我也不喜欢lambda;
df['外接圆面积'] = df.apply(lambda row: gei_circumcircle_area(row['width'], row['height']), axis=1)
不过看起来好理解一些了!
还有一种更人性化的解决方案:
df['外接圆面积'] = gei_circumcircle_area(df['width'], df['height'])
这是pandas的一个特别之处;
它的哲学是因为列于列之间的每个元素都进行相同的运算;
那么可以把列作为参数进行传递,意思就是这些列的元素进行同样的处理;
列与列之间的计算,非常简单!
df['周长'] = (df['width'] + df['height']) * 2
网友评论