例如,当您要将函数calc_val()
应用于数据框并且可以自由定义函数时,最好给它一个像def calc_val(a, b, c)
或{{1 }或def calc_val(df)?换句话说,选项A,B或C:
选项A 的优点是显示函数正在处理哪些列,但是def calc_val(row)
也很混乱,并且通过掩藏重要信息(例如,函数调用)使可读性变差到lambda
)沿线走得更远,这有时使在遍历代码时更难看清该函数的使用位置。
选项B 更加简洁明了,但仍然掩埋了正在调用的函数,并且也没有显示计算中涉及哪些列。
选项C 非常清楚通过将calc_val_a
沿行埋入来应用了什么功能,这与选项A和B不同,但是它没有显示新的列是添加到数据框,也没有在计算中使用哪些列。
假设这些函数调用出现在某些数据处理脚本的apply
函数中,那么对于这样的可读性是否存在标准或公认的最佳实践?
(旁注:我也知道main()
对于速度不是理想的选择,但是我主要关注可读性,同时处理相对较小的数据集。但是,如果有人建议替换apply
调用在多个数据框列上运行的函数,在这种情况下也将有所帮助。)
apply
def calc_val_a(a, b, c):
if c==1:
val = a*b
elif c=='2:
val = a-b
return val
df['val'] = df.apply(lambda row: calc_val_a(row.a, row.b, row.c), axis=1)
def calc_val_b(row):
a = row.a
b = row.b
c = row.c
if c==1:
val = a*b
elif c=='2:
val = a-b
return val
df['val'] = df.apply(calc_val_b, axis=1)