python显示float不可回收

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python显示float不可回收相关的知识,希望对你有一定的参考价值。

1 是的,Python中的float对象不可回收。

2 原因是Python中的float对象是由C语言实现的,它们在内存中被分配和管理。
一旦一个float对象被创建,它将一直占用内存,直到程序结束或者被显式删除。

3 为了避免浪费内存,可以使用一些技巧来最小化浮点数的使用。
比如使用Decimal模块代替float,或者使用NumPy等科学计算库来处理浮点数。
另外,可以使用del语句显式删除不需要的对象,以释放内存。
参考技术A 您好,当我们在Python中使用float类型时,有时候会遇到“不可回收”的问题。这是因为在Python中,float类型是不可变的,也就是说,一旦创建了一个float对象,就无法修改它的值。因此,当我们对一个float对象进行运算时,会创建一个新的float对象来存储结果,而原来的对象则被丢弃。
这种行为在一些情况下可能会导致性能问题,因为频繁创建和丢弃float对象会占用大量内存,并且可能导致垃圾回收器频繁运行。为了避免这种情况,我们可以使用其他类型,如Decimal或Fraction,它们可以提供更精确的计算,并且可以避免创建大量的临时对象。
另外,我们还可以使用NumPy库中的数组来处理大量的数值计算。NumPy中的数组是可变的,并且可以高效地进行向量化计算,这可以大大提高计算效率。
总之,当我们在Python中进行数值计算时,应该根据具体情况选择合适的数据类型和库,以提高计算效率和精度。

python excel dataorganiser TypeError:'float'对象不可迭代

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

我目前有以下数据框:

    Excel 工作表:(57*9000) 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,因此未能成功地将建议应用于我的特定功能。

【问题讨论】:

【参考方案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!

【讨论】:

以上是关于python显示float不可回收的主要内容,如果未能解决你的问题,请参考以下文章

垃圾回收机制算法分析

Java垃圾回收机制

jvm如何判断对象是否可以被回收

Python使用gc模块进行垃圾回收

垃圾回收机制算法分析

2垃圾回收与算法