【问题标题】:Pandas python + format for valuesPandas python +值格式
【发布时间】:2019-11-27 11:18:14
【问题描述】:

这是代码:

import pandas as     pd
from   pandas import Series, DataFrame
import numpy  as     np
import matplotlib.pyplot as plt

df.head(3).style.format({'Budget': "€ {:,.0f}"})
Year    Project Entity  Participation   Country Budget
0   2015    671650 - MMMAGIC - 5G   FUNDACION IMDEA NETWORK*    Participant Spain   € 384,000
1   2015    671650 - MMMAGIC - 5G   ROHDE & SCHWARZ GMBH*   Participant Germany € 12,000
2   2015    671650 - MMMAGIC - 5G   SAMSUNG ELECTRONICS (UK) LIMITED    Coordinator UnitedKingdom   € 997,500

datos1 = (df[(df['Participation'].str.contains('Coordinator')) & (df.Country.str.count('Spain'))])
datos2 = 'Las participaciones en proyectos como coordinador son='
datos4= 'El presupuesto en Euros es ='
display(datos1)
print(datos2, datos1.Country.str.count('Spain').sum())
print(datos4, datos1.Budget.sum())

Year    Project                           Entity                  Participation Country Budget
2015    671598 - 5G-CROSSHAUL   UNIVERSIDAD CARLOS III DE MADRID*   Coordinator Spain   899471.88
2015    671517 - SONATA - 5G    ATOS SPAIN SA*                      Coordinator Spain   602437.50
2015    671704 - CHARISMA - 5G  FUNDACIO PRIVADA I2CAT *FI2CAT      Coordinator Spain   557312.50

我想获得与欧元预算相同的结果,我尝试使用以下代码:

display(datos4, datos1.Budget.sum().style.format('€ {0:,.0f}'))

更新:

display(datos4, datos1.Budget.sum().style.format('€ {0:,.0f}'))

这一行是用这段代码解决的:

print(datos4, '€ {0:,.0f}'.format(datos1.Budget.sum()))

现在,我只有预算中的样式格式有问题,我试过了 用这段代码修复:

datos1 = (df[(df['Participation'].str.contains('Coordinator')) 
             & (df.Country.str.contains('Greece')) 
             & (df.Budget.apply('€ {0:,.0f}'.format))])

或

df['Budget']=df.Budget.apply('€ {0:,.0f}'.format)
datos1 = (df[(df['Participation'].str.contains('Coordinator')) 
                 & (df.Country.str.contains('Greece'))]) 

我的代码有错误,请知道吗?

【问题讨论】:

  • 您好 Diego,如果您可以包含其他人可以运行的代码来演示您的问题,这将很有帮助。例如,如果您在代码中创建一个示例数据框来复制您所拥有的示例,这样我们就会遇到相同的错误。
  • 感谢您的建议,我更新了代码,如果您对欧元表有任何总体想法,请告知。

标签: python pandas python-requests pandas-groupby


【解决方案1】:

我劝你不要把逻辑和外表混为一谈。按照逻辑建表,然后格式化。试试这个代码:

datos1= df.loc[ \
                   df.Participation.  \
                   str.contains('Coordinator',case=False) \
                  & df.Country. \
                    str.contains('Greece',case=False) ]

datos1_pretty= datos1.style.format({"Budget":'€ {0:,.0f}'})

您可以在字典中指定更多列。

【讨论】:

【解决方案2】:

datos1.Budget.sum() 是一个系列的总和,它返回一个float,所以你不能对它应用Pandas style.format。试试这个:

'€ {0:,.0f}'.format(datos1.Budget.sum())

对于表:df['Budget'] = df.Budget.apply('€ {0:,.0f}'.format),如果您想在Budget 列中包含格式化的字符串。 style.format 仅在您拥有 html 前端(即 jupyter)时有效。

【讨论】:

  • 谢谢,这解决了最后一部分,但是在表格中我如何以欧元显示预算?
  • 我更新了代码并使用了 Jupyter,我在表格过滤器中尝试了 df['Budget']=df.Budget.apply('€ {0:,.0f}'.format)和之前,但我不跑。
  • “它不运行”是什么意思?
  • 代码有错误,请检查问题中的更新。
  • 感谢@mcsoini 为我提供的所有帮助,帮助我解决了问题。
猜你喜欢
  • 2023-03-20
  • 2014-11-06
  • 1970-01-01
  • 2023-02-10
  • 2021-06-21
  • 2015-12-26
  • 2018-02-20
  • 2017-10-24
  • 2016-01-29
相关资源
最近更新 更多