【问题标题】:Python -- Pandas : How to apply aggfunc to data in currency format?Python -- Pandas:如何将 aggfunc 应用于货币格式的数据?
【发布时间】:2014-03-02 23:47:36
【问题描述】:
Campaign ID Revenue Total
601         $2,690 
601         $817 
601         $0 
649         $4,339 
10901   $7,273 

我上面有一张桌子。想要将 groupby 函数应用于数据并应用 sum ( overincome_total) 。 Pandas 给出了一个 NA 值,因为income_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()

【问题讨论】:

  • 您是如何创建表格框架的?您需要发布您的代码,以便人们可以看到问题出在哪里
  • 这是我的代码:import pandas as pd path = r"C:\Users\roy\Google Drive\Work\Backlog\test.csv" df = pd.read_csv(path) df[[ 'Product ID ','Revenue Total']].head() df.groupby(['Product ID '])[['Revenue Total']].sum() 和Revenue Total 中输出的值都是NaN
  • 代码应作为问题的编辑添加(并放入代码块中)。我对 Python 了解的不够多,无法为您进行编辑,但它对潜在的回答者帮助不大。

标签: python pandas


【解决方案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

【讨论】:

  • 我想要标题 =0 。问题是收入总计的 dtype 是对象,并且 group by 无法对其执行 agfunc。
  • 我已经更新了我的答案。另外作为对 stackoverflow 新手的提醒,对您来说,投票和/或接受答案很重要。请参阅此处的说明:meta.stackexchange.com/questions/5234/… 谢谢。
  • 好的所以问题是删除 $ 和 ,。那我该怎么做呢
【解决方案2】:

如果你的数据文件看起来像

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,}'——这只是为了让我读取数据鉴于我上面显示的格式。您的格式可能不同,但您没有发布,所以我不知道它是什么...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2010-09-24
    相关资源
    最近更新 更多