我有下面的代码来计算DataFrame中输出的平均值,数据来自XLSX文件。calculate_score()
将返回float
分数,例如5.12.
import pandas as pd
testset = pd.read_excel(xlsx_filename_here)
total_score = 0
num_records = 0
for index, row in testset.iterrows():
if row['Data1'].isna() or row['Data2'].isna() or row['Data3'].isna():
continue
else:
score = calculate_score([row['Data1'], row['Data2']], row['Data3'])
total_score += score
num_records += 1
print("Average score:", round(total_score/num_records, 2))
根据这个答案,df.iterrows()
是缓慢和反模式的。我如何将上述代码更改为使用矢量化或列表解析?
- 更新**
我在上面的例子中过度简化了calculate_score()
,它实际上是使用SacreBLEU库计算一些句子的BLEU分数:
import evaluate
sacrebleu = evaluate.load("sacrebleu")
def calculate_score(ref, translation):
return sacrebleu.compute(predictions=[translation], references=[ref])
请注意,原始代码也略有更新。如何修改calculate_score()
以使用列表解析?谢谢
2条答案
按热度按时间fjaof16o1#
以下是如何使用向量化修改代码:
ev7lccsx2#
您必须修改
calculate_score
的实现,以接受两个Series
作为参数(或两列的一个DataFrame
),而不是两个标量值:输出:
输入: