Python - Pandas:如何将aggfunc应用于货币格式的数据?

时间:2014-03-01 00:46:29

标签: python pandas

Campaign ID Revenue Total
601         $2,690 
601         $817 
601         $0 
649         $4,339 
10901   $7,273 

我上面有一张桌子。想要将groupby函数应用于数据并应用sum(over revenue_total)。 Pandas给出NA值,因为revenue_total是对象数据类型。任何帮助

import pandas as pd 
path = r"C:\Users\roy\Google Drive\Work\Backlog\test.csv" 
df = pd.read_csv(path) 
df[['Campaign ID','Revenue Total']].head() 
df.groupby(['Campaign ID'])[['Revenue Total']].sum()

2 个答案:

答案 0 :(得分:1)

您的数据文件存在问题。

如果您执行以下操作

  • 从美元数字中删除“,”和“$”
  • 使用','作为单独的

然后运行你的代码......

import pandas as pd 
path = r"C:\Users\roy\Google Drive\Work\Backlog\test.csv" 
df = pd.read_csv(path) 
df[['Campaign ID','Revenue Total']].head() 
print  df.groupby(['Campaign ID'])[['Revenue Total']].sum() 

将给出此结果

             Revenue Total
Campaign ID               
601                   3507
649                   4339
10901                 7273

答案 1 :(得分:0)

如果您的数据文件是

Campaign ID  Revenue Total
601         $2,690 
601         $817 
601         $0 
649         $4,339 
10901   $7,273 

然后你可以删除$和逗号并使用

将其解析为DataFrame
import pandas as pd

df = pd.read_csv('data', sep='\s{2,}',
                 converters={'Revenue Total':lambda x: x.lstrip('$').replace(',','')}) 

   Campaign ID Revenue Total
0          601          2690
1          601           817
2          601             0
3          649          4339
4        10901          7273

您可能想尝试添加

converters={'Revenue Total':lambda x: x.lstrip('$').replace(',','')}

致电pd.read_csv。这就是剥离$和逗号的原因。

您可能不需要sep='\s{2,}' - 这只是为了让我能够根据上面显示的格式读取数据。你的格式可能不同,但你没有发布,所以我不知道它是什么......