【问题标题】:Convert currency to float (and parentheses indicate negative amounts)将货币转换为浮动(括号表示负数)
【发布时间】:2015-10-09 20:56:30
【问题描述】:

我有一个带有货币的df:

df = pd.DataFrame({'Currency':['$1.00','$2,000.00','(3,000.00)']})

     Currency
0       $1.00
1   $2,000.00
2  (3,000.00)

我想将“货币”dtype 转换为浮点数,但括号字符串(表示负数)有问题。这是我当前的代码:

df[['Currency']] = df[['Currency']].replace('[\$,]','',regex=True).astype(float)

产生错误:

ValueError: could not convert string to float: (3000.00)

我想要的 dtype float 是:

     Currency
0       1.00
1   2000.00
2  -3000.00

【问题讨论】:

    标签: python pandas currency


    【解决方案1】:

    只需将) 添加到现有命令,然后将( 转换为- 以使括号中的数字变为负数。然后转换为浮点数。

    (df['Currency'].replace( '[\$,)]','', regex=True )
                   .replace( '[(]','-',   regex=True ).astype(float))
    
       Currency
    0         1
    1      2000
    2     -3000
    

    【讨论】:

    • @George 你从 JohnE 那里得到它。更快很棒。
    • @JohnE,如果我可以添加到几乎完美的答案:df['Currency'].replace( '[\$,)]','', regex=True ).replace( '[(]','-', regex=True).replace( '[ ]+', 'NaN', regex=True).astype(float)
    • @JohnE,对不起,我应该澄清一下,这会将空格(任意数量的连续空格)替换为“NaN”,因为空格将在.astype(float)
    • @rohit_wason 好的,明白了,这是一个好点。以下是您建议通过一些额外的调整来处理空字符串:(df['Currency'].replace( '[\$,) ]+','',regex=True ).replace( '[(]','-', regex=True ).replace( '', 'NaN', regex=True ).astype(float)) 如果您想写下来,我很乐意投票。您可能还想添加一些带空格的附加行来演示。如果你不想,我可以将它添加到我的,虽然我的太旧了,我现在有点不愿意改变它。
    【解决方案2】:

    这是如果您想确保将其添加到 DataFrame 中,特别是如果您有很多列,而平均 DataFrame 具有这样您就可以处理它

    df['Currency']=(df['Currency'].replace( '[\$,)]','', regex=True ) .replace( '[(]','-', regex=True ).astype(float))

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多