将字符串中的负数转换为浮点(Python)?
嗯。我放弃了 我有一个数据框,其中有一列(“数量”)大数字:将字符串中的负数转换为浮点(Python)?,python,numbers,negative-number,Python,Numbers,Negative Number,嗯。我放弃了 我有一个数据框,其中有一列(“数量”)大数字: Amount -1 000 000,00 4 848 903,00 -2 949 234,00 13 038 023,00 7 985 232,00 .... 我想把这些转换成我可以计算的数字 让我们调查一下: >type(b["Amount"][0]) str 好的,是一根绳子 >float("-1 000 000,00".replace(' ', '').replace(',','.')) -1000000.
Amount
-1 000 000,00
4 848 903,00
-2 949 234,00
13 038 023,00
7 985 232,00
....
我想把这些转换成我可以计算的数字
让我们调查一下:
>type(b["Amount"][0])
str
好的,是一根绳子
>float("-1 000 000,00".replace(' ', '').replace(',','.'))
-1000000.00
好的,很好用
要生成lambda thingy(处理列中的所有元素),我需要在函数中使用它:
def make_float(num):
num = num.replace(' ','').replace(',','.')
return float(num)
>make_float(b["Amount"][0])
ValueError: could not convert string to float: −1 000 000.00
什么
>b["Amount"][0].replace(' ','').replace(',','.')
Out[258]:
'\xe2\x88\x921\xc2\xa0000\xc2\xa0000.00'
哦,不!!该死!我放弃了
Python是否有一个简单的函数/方法可以将我的数字(包括负数)转换为我可以计算的数字?看起来字符串中的减号('-')符号有问题 试试看:
def make_float(num):
num = num.replace(' ','').replace(',','.').replace("−", "-")
return float(num)
这应该能解决你的问题。问题是获取列的第一个值作为您应该使用的值
pd.Series.values[0]
import pandas as pd
s = pd.Series(['-1 000 000,00'])
def make_float(num):
num = num.replace(' ','').replace(',','.')
return float(num)
s.map(make_float)
# 0 -1000000.0
# dtype: float64
make_float(s.values[0])
# -1000000.0
如果你试着对它进行编码呢
def make_float(num):
num = num.encode('latin-1').replace(' ','').replace(',','.')
return float(num)
嗯。这似乎奏效了。 这是一个分为3步的解决方案
chardetect data.csv
它以0.99的置信度表示“utf8”
pandas.read_csv(数据…,编码='utf8')
def make_float(num):
num=num.replace(u'\N{减号}','-')#对减号进行编码
num=num.replace(',','。)#将十进制分隔符从逗号改为点
num=num.replace(unichr(160),“”)#将(非中断)空格编码为“”
num=浮点(num)
返回数
然后,我将这个函数传递给pandas.read_csv东西,并带有“pandas.read_csv”(数据…,encoding='utf8',converters={'Amount':make_float})`
到目前为止工作得很好。
您的数据包含unicode减号(unicode中的几个减号之一)和不间断空格(unicode中的几个空格字符之一)
可以使用将字符转换为可由float()
正确解析的格式
我甚至试过这样一个函数:def make_float(num):num=num.replace(‘,’,‘.’)num=num.replace(‘,‘,‘,’)num=num.replace(‘\u000013’,‘-’)num=num.replace(u’\N{减号},‘-’)num decode(‘unicode(转义’)。encode(‘ascii’,‘忽略’)num=float(num)返回num,但不打印(
b[“Amount”][0])
打印出来?在make_float
函数中,设置num
变量后,是否可以添加print(num)
并查看打印出来的内容?您编写的函数工作正常。问题在于b[“Amount”][0]
我猜我正在用pandas.read\u csv读取此文件。更改编码可能有帮助,也可能没有帮助?print(b[“Amount”][0])
的值是-1 000,00
。
def make_float(num):
return float(num.translate({0x2c: '.', 0xa0: None, 0x2212: '-'}))
make_float('−1\xa0000\xa0000,00')