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不可回收的主要内容,如果未能解决你的问题,请参考以下文章