将字符串中的负数转换为浮点(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:
    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')