Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 如何剥离字符串并将其转换为浮点(小数)?_Python_Python 3.x_String_Dataframe_Floating Point - Fatal编程技术网

Python 如何剥离字符串并将其转换为浮点(小数)?

Python 如何剥离字符串并将其转换为浮点(小数)?,python,python-3.x,string,dataframe,floating-point,Python,Python 3.x,String,Dataframe,Floating Point,我正在尝试将类似“8191.55MB”的字符串转换为“8191.55” 这样我就可以把它除以1024,得到千兆字节 我正在尝试的代码给了我“819155”而不是“8191.55” 代码: TotalRAM = dfHandler['Total Physical Memory'].values[0] TotalRAM = (int)(''.join(i for i in TotalRAM if i.isdigit())) 考虑到你的密码,我会选择 TotalRAM = dfHandler['To

我正在尝试将类似“8191.55MB”的字符串转换为“8191.55” 这样我就可以把它除以1024,得到千兆字节

我正在尝试的代码给了我“819155”而不是“8191.55”

代码:

TotalRAM = dfHandler['Total Physical Memory'].values[0]
TotalRAM = (int)(''.join(i for i in TotalRAM if i.isdigit()))

考虑到你的密码,我会选择

TotalRAM = dfHandler['Total Physical Memory'].values[0]
TotalRAM = float(''.join(i for i in TotalRAM if (i.isdigit() or i == ".")))
使用
replace()
去除逗号值,并使用
split()
将其拆分为多个部分。split函数还将去掉前导和尾随空格

RAM = ' 8,191.55 MB '
ram_in_MB = float(RAM.replace(',','').split()[0])
print(ram_in_MB)
# 8191.55

我会使用正则表达式(re)来提取字符串的数字部分。它将得到数字(d+)和小数(.)

结果:

8191.55

更本地化的方法如何:

从区域设置导入setlocale、LC\u NUMERIC、atof
setlocale(LC_数字“”)
# ...
TotalRAM=dfHandler['Total Physical Memory']。值[0]
TotalRAM=atof(TotalRAM.split()[0])

您的join语句正在删除小数位。您可能需要考虑用“’”替换所有非数字字符,然后进行浮点转换。另外,您希望使用浮点,而不是int。int将四舍五入到最接近的整数,并去掉小数点。在这种情况下,您可以绕过它,但一般来说,您可能需要研究正则表达式:您的正则表达式是错误的-没有考虑逗号或没有小数的数字。您不需要逗号,因为浮点不接受逗号。我编辑了我的答案来处理整数值。谢谢
import re
num = re.findall("(\d+(?:\.\d+)?)", "8,191.55 MB")
print(float(''.join(num)))
8191.55