Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';这是使用fuzzyfuzzy将列的每个值与单独数据帧的所有值进行比较的最佳方法;谁的专栏?_Python_Pandas_Dataframe_Fuzzywuzzy - Fatal编程技术网

Python 什么';这是使用fuzzyfuzzy将列的每个值与单独数据帧的所有值进行比较的最佳方法;谁的专栏?

Python 什么';这是使用fuzzyfuzzy将列的每个值与单独数据帧的所有值进行比较的最佳方法;谁的专栏?,python,pandas,dataframe,fuzzywuzzy,Python,Pandas,Dataframe,Fuzzywuzzy,这件事真的很棘手。假设我有两个数据帧,一个有水果,另一个有水果糖果。每个数据帧中都有大量其他数据。看起来是这样的: fruit: fruitId fruitName 0 1 banana 1 2 orange 2 3 apple 3 4 pear 4 5 lemon candy: candyId candyName fruitId 0 1 Orange Juli

这件事真的很棘手。假设我有两个数据帧,一个有水果,另一个有水果糖果。每个数据帧中都有大量其他数据。看起来是这样的:

fruit: 

   fruitId  fruitName
0     1     banana
1     2     orange
2     3     apple
3     4     pear
4     5     lemon

candy:

   candyId  candyName         fruitId
0     1     Orange Julius     null
1     2     Bananarama        null
2     3     Sour Lemon Drops  null
3     4     Chocolate Bar     null
4     5     Applicious        null

我需要将
candyName
与适当的水果匹配,然后将相应的
routinid
放入
candy
数据框中的
routinid
列中。为了我的目的,让我们假设
.contains
根本不起作用;在
candyName
列中有太多创造性的拼写和明显的拼写错误

我试图定义一个使用fuzzyfuzzy的函数,然后在
.map
中使用它,但我无法让该函数工作。它需要检查第一个df的每个值,看看它是否在第二个df中,然后移动到下一个值,等等。我最终构建的函数一直希望在(a)在同一数据帧中,或者(b)在同一行中进行比较

我确实找到了一个解决方案,但它很难看,因为它使用了您不应该使用的ItErrors()。这是:

将熊猫作为pd导入
从fuzzyfuzzy导入fuzz
candy_文件='candy.csv'
水果文件='fruits.csv'
candy=pd.read\u csv(candy\u文件)
水果=pd.read\u csv(水果文件)
dict={}
对于我来说,在candy中第1行。iterrows()
对于j,水果中的第2行。iterrows():
如果fuzz.partial_比率(第1行['candyName'],第2行['FrootName'])>=80:
dict[row1['candyName']=row2['fruitId']
糖果['FROUTID']=糖果['candyName'].地图(dict)
这需要永远。比如,10分钟就可以穿过500排。有更好的方法吗?我已经编写了上百个不同的代码片段,以获得更快的函数,而不会有任何进展


谢谢

它很慢,因为您当前正在O(N^2)中工作

与其使用ItErrors,不如使用字典进行迭代。这可以通过以下方式完成:

candydict = candy.to_dict{}
fruitdict = fruit.to_dict{}

for k,v in candydict.items():
   for k2,v2 in fruitdict.items():
      #do the rest of your comparisons here

这会大大加快速度。

太好了,谢谢!那么,我该如何引用这些列呢
v['candyName']
抛出KeyError.k,v代表键和值,所以'candyName'将是k的一个。如果你需要更多的澄清,请告诉我!非常感谢你迄今为止的帮助。如果我做了
k['candyName']
我得到
TypeError:字符串索引必须是整数
。我错过了什么?我知道了。我不得不在candydict['candyName']中使用
表示k,v。items()
。再次感谢!