Python pandas 模糊逻辑

标签 python pandas fuzzy-logic

我目前有一个需要模糊逻辑连接的数据集。数据框 df1 是较小的引用表,包含大约 10 个观测值。数据框 df2 是我的主要数据框,包含大约 2000 个观察值,需要在其中执行模糊逻辑连接。我在下面介绍这个例子和我的尝试。

import difflib
df1 = pd.DataFrame({'number':[1,2,3,4,5],'not_shifted':['one','two','three','four','five']})
df2 = pd.DataFrame({'values':[['test'],['a'],['b'],['c'],['d'],['e'],['f'],['f'],['f']],'not_shifted':[np.nan,'one','too','three','fours','five','six',np.nan,'one']})

# my approach
df2['not_shifted'] = df2['not_shifted'].map(lambda x: difflib.get_close_matches(x, df1['not_shifted'])[0])

我收到以下错误: 列表超出范围

TypeError: 'float' object is not utterable

如果我用其他东西替换 np.nan,我会收到另一个错误:

List out of range

最佳答案

你得到TypeError因为数据帧 df2 具有 nan 值,所以您必须删除它。

另一个问题:df1 没有“六”和 df2['not_shifted'] = df2['not_shifted'].map(lambda x: difflib.get_close_matches(x, df1['not_shifted'])[0]) 的规则生成错误 List out of range因为其中一个列表是空的。

您的代码将如下所示(或者如果您向 df1 添加“六”的规则,则可以使用 your_approach)。

import pandas as pd
import numpy as np
import difflib

df1 = pd.DataFrame({'number':[1,2,3,4,5],'not_shifted':['one','two','three','four','five']})
df2 = pd.DataFrame({'values':[['test'],['a'],['b'],['c'],['d'],['e'],['f'],['f'],['f']],'not_shifted':[np.nan,'one','too','three','fours','five','six',np.nan,'one']})

# Drop nan value
df2=df2.dropna()

# You cat write [0] because df1 does not have 'six'
df2['not_shifted'] = df2['not_shifted'].map(lambda x: difflib.get_close_matches(x, df1['not_shifted']))
print df2

输出:

  not_shifted values
1       [one]    [a]
2       [two]    [b]
3     [three]    [c]
4      [four]    [d]
5      [five]    [e]
6          []    [f]
8       [one]    [f]

关于Python pandas 模糊逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427678/

相关文章:

pandas - 在 Seaborn 的 distplot 或 kdeplot 的平均峰值处画一个点

python - Excel 模糊查找中使用的算法

python - 类型错误 : function() takes exactly 2 arguments (1 given) (python)

python - 尝试编写递归函数来迭代嵌套字典时出现 RecursionError

python - 使用 pandas GroupBy 获取每个组的统计数据(例如计数、平均值等)?

sql - SQL模糊联接-MSSQL

python - 如何使用 python 库 re.sub 去除文件的开头?

python - 将 Matlab 代码转换为 Python 不可广播输出的问题

python - 如何对 pandas Dataframe 的一列中的所有值进行集合并集?