【问题标题】:python excel dataorganiser TypeError: 'float' object is not iterablepython excel dataorganiser TypeError:'float'对象不可迭代
【发布时间】:2020-09-26 19:23:46
【问题描述】:

我目前有以下数据框:

  1. Excel 工作表:(57*9000)
  2. Excel 工作表:(49*8000)

我有以下功能:

  • 在每个数据框中定位特定列

  • 求 excel sheet 1 和 excel sheet 2 中每个单元格的最大相似度

  • 对齐每个匹配并保存在 3.excel 文件中

代码:

import pandas as pd
import numpy as np
from difflib import SequenceMatcher


def similar(a, b):
    ratio = SequenceMatcher(None, a, b).ratio()
    return ratio

#Load Batchlog to Data frame

data1 = Batchlog_data = pd.read_excel (r'file1.xlsx')
data2 = Web_data = pd.read_excel (r'file2.xlsx')

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)


order = []
for index, row in df1.iterrows():
    maxima = [similar(row['Name'], j) for j in df2['Name']]
    best_ratio = max(maxima)
    best_row = np.argmax(maxima)

    order.append(best_row)

df2 = df2.iloc[order].reset_index()

pd.concat([df1, df2], axis=1)

dfFinal=pd.concat([df1, df2], axis=1)

dfFinal.to_excel("Assembled_Tc2_adjustments.xlsx")  

输出:

  File "C:\Users\Anaconda3\lib\difflib.py", line 311, in __chain_b
    for i, elt in enumerate(b):

TypeError: 'float' object is not iterable

我确实在堆栈上尝试了以前帖子中的一些解决方案,但我仍在学习 python,因此未能成功地将建议应用于我的特定功能。

【问题讨论】:

    标签: python excel pandas iterable


    【解决方案1】:

    更新/解决部分

    我在 Stack 中提出的另一个问题解决了这个问题!

    对于这种特殊情况,它给出错误的原因:

    TypeError: 'float' object is not iterable
    

    是因为数据帧需要从浮点数转换为字符串,以便函数遍历它们。

    就在下面

    df1 = pd.DataFrame(data1)
    df2 = pd.DataFrame(data2)
    

    插入这个:(还要记住 df[You_Column_You_want_To_Iterate_Through]

    df1['Name'] = df1['Name'].astype(str)
    df2['Name'] = df2['Name'].astype(str)
    

    以下代码可以:

    • 它将 2 个输入文件转换为数据帧
    • 然后它将获取一个特定的列(在这种情况下,它们都称为名称)并将其用作匹配输入
    • 它取文件 1 中的一个名称,并贯穿文件 2 中的所有名称
    • 然后它会获取匹配度最高的名称,并保存它们各自的行,并将它们彼此相邻地保存在输出文件中

    代码:

    import pandas as pd
    import numpy as np
    from difflib import SequenceMatcher
    
    def similar(a, b):
        ratio = SequenceMatcher(None, a, b).ratio()
        return ratio
    
    #Load Batchlog to Data frame
    
    data1 = pd.read_excel (r'File1.xlsx')
    data2 = pd.read_excel (r'File2.xlsx')
    
    df1 = pd.DataFrame(data1)
    df2 = pd.DataFrame(data2)
    
    df1['Name'] = df1['Name'].astype(str)
    df2['Name'] = df2['Name'].astype(str)
    
    #Function/LOOP
    order = []
    for index, row in df1.iterrows():
        maxima = [similar(row['Name'], j) for j in df2['Name']]
    
    #best_Ratio=Best Match
        best_ratio = max(maxima)
        best_row = np.argmax(maxima)
    
    #Rearrange new order and save in Output File
        order.append(best_row)
    
    df2 = df2.iloc[order].reset_index()
    
    pd.concat([df1, df2], axis=1)
    
    dfFinal=pd.concat([df1, df2], axis=1)
    
    dfFinal.to_excel("OUTPUT.xlsx")  
    #Thank you for the help!
    

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2020-07-23
      • 1970-01-01
      • 2021-12-13
      • 2017-06-22
      • 2020-03-19
      相关资源
      最近更新 更多