首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >StyleFrame row_index AttributeError:“int”对象没有属性“”value“”

StyleFrame row_index AttributeError:“int”对象没有属性“”value“”
EN

Stack Overflow用户
提问于 2021-03-02 15:25:54
回答 1查看 91关注 0票数 0

我正在尝试以编程方式创建一个电子表格来存储一些AWS数据,方法是采用Excel模板并向其中添加新数据。为此,我决定使用StyleFrame来保留格式。我已经设法将数据以我想要的格式连接在一起,但是当我试图将其写入Excel文件时,我总是遇到索引问题。

stacktrace的相关部分是:

代码语言:javascript
运行
复制
File "/Users/jaybailey/PycharmProjects/CostReports/lambdas/build_cost_reports/build_cost_reports.py", line 143, in create_organisation_cost_report
    org_report.to_excel(create_report_name(organisation)).save()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/styleframe/style_frame.py", line 421, in to_excel
    export_df.index = [row_index.value for row_index in export_df.index]
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/styleframe/style_frame.py", line 421, in <listcomp>
    export_df.index = [row_index.value for row_index in export_df.index]
AttributeError: 'int' object has no attribute 'value'

我尝试将dtype更改为"object",重置索引,并手动将其就地重置。我也尝试过使用调试器,这让我意识到我的错误--我影响的是数据帧,而不是样式帧。我发现StyleFrame上的row_indexes属性是一个由int组成的元组,这使得这个错误更有意义。我尝试手动更改它,但该属性是只读的。

考虑到row_indexes属性不能更改,它来自StyleFrame,并且缺少StyleFrame本身所要求的值,所以我决定在这里询问。这是我正在查看的代码部分。

代码语言:javascript
运行
复制
org_report = styleframe.StyleFrame.read_excel(f'{organisation.type}{TEMPLATE_SUFFIX}')
report_data = transform_aws_service_costs_to_excel_rows(organisation_costs)
report_data = pandas.DataFrame(report_data)

# Used to make sure the data concatenates properly.
report_data.columns = org_report.columns


org_report.data_df = concat([org_report.data_df.iloc[:4], report_data,
                             org_report.data_df.iloc[5:]], axis=0).reset_index(drop=True)

org_report.to_excel(create_report_name(organisation)).save() # Error occurs here.

我知道helper函数很难让人完全理解。create_report_name只创建了一个"YYYY-MM-DD-Organisation_Name_Cost_Report.xlsx".类型的字符串report_data会生成以下输出:

代码语言:javascript
运行
复制
                              TOTAL SPEND  ...  Monthly Change
0       Amazon Relational Database Service  ...          -4.38%
1   Amazon Elastic Compute Cloud - Compute  ...          -3.65%
2                              EC2 - Other  ...           1.25%
3                      AWS Premium Support  ...         -100.0%
4                         AmazonCloudWatch  ...          -2.36%
5                         Amazon Detective  ...          -0.45%
6            Amazon Simple Storage Service  ...           6.38%
7                           AWS CloudTrail  ...          -7.46%
8            Amazon Elastic Load Balancing  ...          -6.34%
9                               AWS Lambda  ...           -2.3%
10                                   Other  ...         255.49%

就在我尝试将其写入org_report文件之前,它看起来就像这样,其中大部分仍然填充着虚拟数据。

代码语言:javascript
运行
复制
                               TOTAL SPEND 2 mo.ago Last Month Monthly Change
0               Total Organisational Spend      5.0        6.0            0.2
1                                      nan      nan        nan            nan
2                             AWS SERVICES      nan        nan            nan
3                                    Total      5.0        6.0            0.2
4       Amazon Relational Database Service   196994     188361         -4.38%
5   Amazon Elastic Compute Cloud - Compute   106007     102134         -3.65%
6                              EC2 - Other  72467.6    73373.5          1.25%
7                      AWS Premium Support  40442.2          0        -100.0%
8                         AmazonCloudWatch  32248.8    31488.9         -2.36%
9                         Amazon Detective  20903.7    20809.1         -0.45%
10           Amazon Simple Storage Service  19415.6    20655.3          6.38%
11                          AWS CloudTrail  12135.8      11230         -7.46%
12           Amazon Elastic Load Balancing  10617.6    9944.26         -6.34%
13                              AWS Lambda  8258.99    8069.12          -2.3%
14                                   Other  21762.7    77363.8        255.49%
15                           SUBCATEGORIES      nan        nan            nan
16                               DIRECTORS      nan        nan            nan
17                                   Total      5.0        6.0            0.2
18                                     nan      nan        nan            nan
19                         SHARED PRODUCTS      nan        nan            nan
20                                   Total      5.0        6.0            0.2
21                                     nan      nan        nan            nan
22                       Subcategory Total      5.0        6.0            0.2
23               Subcategory Cost Coverage      1.0        1.0            0.0

任何建议都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-02 17:59:41

问题主要出在这一行:

代码语言:javascript
运行
复制
org_report.data_df = concat([org_report.data_df.iloc[:4], report_data,
                             org_report.data_df.iloc[5:]], axis=0).reset_index(drop=True)

这破坏了底层的.data_df,因为pd.concat.reset_index返回一个标准的DataFrame,而StyleFrame期望每个“单元”都包含一个包装器Container对象(该对象具有错误中缺少的.value属性)。

最佳实践是尽可能多地处理pandas级别的数据,并且仅在准备好开始设置样式和导出时才创建StyleFrame对象。

代码语言:javascript
运行
复制
org_report = pd.read_excel(f'{organisation.type}{TEMPLATE_SUFFIX}')
report_data = transform_aws_service_costs_to_excel_rows(organisation_costs)
report_data = pandas.DataFrame(report_data)

# Used to make sure the data concatenates properly.
report_data.columns = org_report.columns

org_report= concat([org_report.iloc[:4], report_data,
                    org_report.iloc[5:]], axis=0).reset_index(drop=True)

sf = styleframe.StyleFrame(org_report) 
sf.to_excel(create_report_name(organisation)).save()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66434981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档