Pandas:如何使用 Numpy 函数而不是 Lambda 函数来获得相同的结果(因为 Numpy 更快)?
Pandas: How to use a Numpy function instead of a Lambda function for the same result (since Numpy is faster)?
下面的命令给我以下错误:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
为什么以及如何解决?
df['Score'] = np.array(fuzz.ratio(df['Vendor'], df['Company']))
注意 - 我知道下面的命令有效,但我希望使用 numpy,因为我听说它比 lambda 快得多:
df['Score'] = df['Vendor'].apply(lambda x: fuzz.ratio(x, df['Company']))
谢谢!
试试这个,它应该和 numpy 语句做同样的事情
df.apply(lambda x: fuzz.ratio(x.Vendor, x.Company), axis=1)
也就是说,如果 fuzz.ratio 采用不可迭代。
或者也许:
np.apply_along_axis(fuzz.ratio, 0, df['Vendor'], df['Company'] )
考虑我的测试数据框:
df =pd.DataFrame([['ACME Factory','ACME Factory Inc.'],['CME Factory Inc.','CMEA Factry'],['ATHMA Inc.','Cypress Hill CO.']],columns=['Vendor','Company'])
df['Score'] = np.array(fuzz.ratio(df['Vendor'].values[0],df['Company'].values[0]))
Vendor Company Score
0 ACME Factory ACME Factory Inc. 83
1 CME Factory Inc. CMEA Factry 83
2 ATHMA Inc. Cypress Hill CO. 83
显然我的分数计算是错误的,我相信这是由于我在安装 python-Levenshtein 时遇到的问题,
这是 fuzzywuzzy 库正常工作的依赖。但我可以摆脱:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我可以成功重现。
我不知道所有这些强制转换的性能如何 (.values[0])
使用 .values 你只能从 datframe 中获取数据,但它位于列表内部,使用 [0] 你可以从列表中获取字符串。
告诉我它是否适合你。
ShadyMBA 建议:
下面的命令给我以下错误:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
为什么以及如何解决?
df['Score'] = np.array(fuzz.ratio(df['Vendor'], df['Company']))
注意 - 我知道下面的命令有效,但我希望使用 numpy,因为我听说它比 lambda 快得多:
df['Score'] = df['Vendor'].apply(lambda x: fuzz.ratio(x, df['Company']))
谢谢!
试试这个,它应该和 numpy 语句做同样的事情
df.apply(lambda x: fuzz.ratio(x.Vendor, x.Company), axis=1)
也就是说,如果 fuzz.ratio 采用不可迭代。
或者也许:
np.apply_along_axis(fuzz.ratio, 0, df['Vendor'], df['Company'] )
考虑我的测试数据框:
df =pd.DataFrame([['ACME Factory','ACME Factory Inc.'],['CME Factory Inc.','CMEA Factry'],['ATHMA Inc.','Cypress Hill CO.']],columns=['Vendor','Company'])
df['Score'] = np.array(fuzz.ratio(df['Vendor'].values[0],df['Company'].values[0]))
Vendor Company Score
0 ACME Factory ACME Factory Inc. 83
1 CME Factory Inc. CMEA Factry 83
2 ATHMA Inc. Cypress Hill CO. 83
显然我的分数计算是错误的,我相信这是由于我在安装 python-Levenshtein 时遇到的问题, 这是 fuzzywuzzy 库正常工作的依赖。但我可以摆脱:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我可以成功重现。
我不知道所有这些强制转换的性能如何 (.values[0]) 使用 .values 你只能从 datframe 中获取数据,但它位于列表内部,使用 [0] 你可以从列表中获取字符串。
告诉我它是否适合你。
ShadyMBA 建议: