将Python pandas DataFrame中的数字格式化为数千或数百万的货币

时间:2016-12-21 20:50:14

标签: python pandas numbers format currency

我有一个数据帧:pd.DataFrame({“Amount”:[19000000,9873200,823449242]}),我需要将数字转换为数百万的货币($)。即$ 19.00MM,$ 9.88MM和$ 823.45MM。

有没有人知道这样做的快捷方法?

谢谢!

2 个答案:

答案 0 :(得分:2)

这简单地划分了值 - 它没有添加$符号等(这只是改变lambda函数的问题),但Amount仍然是dtype float所以你可以把它当作号。

 In [41]: df = pd.DataFrame({"Amount":[19000000, 9873200, 823449242]})

In [42]: df['MillionsAsFloat'] = df.apply(lambda row: row['Amount'] / 1000000, axis=1
    ...: )

In [43]: df['MillionsAsString'] = df.apply(lambda row: '$' + str(round(row['Amount'] 
    ...: / 1000000,2)) + 'MM', axis=1)

In [44]: df
Out[44]: 
      Amount  MillionsAsFloat MillionsAsString
0   19000000        19.000000          $19.0MM
1    9873200         9.873200          $9.87MM
2  823449242       823.449242        $823.45MM

答案 1 :(得分:1)

我认为以下内容应该有效:

df['($) millions'] = '$' + (df['Amount'].astype(float)/1000000).astype(str) + 'MM'

In [3]:
df['($) millions'] = '$' + (df['Amount'].astype(float)/1000000).astype(str) + 'MM'
df

Out[3]:
      Amount   ($) millions
0   19000000        $19.0MM
1    9873200      $9.8732MM
2  823449242  $823.449242MM

如果需要,您还可以round

In [5]:
df['($) millions'] = '$' + (df['Amount'].astype(float)/1000000).round(2).astype(str) + 'MM'
df

Out[5]:
      Amount ($) millions
0   19000000      $19.0MM
1    9873200      $9.87MM
2  823449242    $823.45MM

另一种方法是使用format对每个值应用apply

In [15]:
df['($) millions'] = (df['Amount']/1000000).apply(lambda x: '${:,.2f}MM'.format(x))
df

Out[15]:
      Amount ($) millions
0   19000000     $19.00MM
1    9873200      $9.87MM
2  823449242    $823.45MM

但是,我希望第一种方法可以更好地扩展到大型数据集,尽管有时列表推导在字符串方面更快

这是列表理解方法:

In [17]:
df['($) millions'] = ['${:,.2f}MM'.format(x) for x in df['Amount']/1000000]
df

Out[17]:
      Amount ($) millions
0   19000000     $19.00MM
1    9873200      $9.87MM
2  823449242    $823.45MM