【问题标题】:Iterating through an excel drop down menu and extracting data遍历excel下拉菜单并提取数据
【发布时间】:2021-05-04 08:16:31
【问题描述】:

我有一个数据集,其中包含美国每个县的医疗保健信息。我只是想从每个县提取一个值,即人均实际医疗成本 (AB27)。

我遇到的问题是数据集使用下拉列表来提取每个县的信息。当我尝试创建一个熊猫数据框时,它只获取下拉列表。

理想情况下,我可以遍历数据集并将每个县的名称和人均实际医疗成本 (AB27) 提取到 pandas 数据框中。

有什么想法吗?

【问题讨论】:

  • 我猜有一些 VBA 代码或类似的东西可以从数据库中提取数据并将其显示在 excel 中。你有没有看过excel的宏?
  • @GeneBurinsky 我在这里绝对是我的头,我对 VBA 和 excel 宏的主题完全一无所知。我确实认为您是对的,当我检查单元格 AB27 的内容时,它显示为: =VLOOKUP($P$7,'State_county 2019'!$1:$1048576,MATCH(Report!A28,'State_county 2019'!$2:$2, 0),0)
  • 感谢您的代码。 vlookup 和 match 函数通常用于在 excel 中执行连接或数据合并,因此它没有我想象的那么复杂。据推测,所有的数据都已经在 excel 文件中了。作为以下答案的替代方案,只需阅读整个报告表,然后使用 pandas 或其他 python 工具在数据行中查找“人均实际健康成本”可能是明智的。
  • 啊好吧,这更简单。我会四处寻找有关如何扩展报告表的指南,但如果您有任何建议会很好

标签: python excel pandas


【解决方案1】:

只使用 pandas 会很麻烦。

使用xlwings

B3 中的下拉列表可能来自 Excel 文件中的某个范围。如果更改 B3 的值也会将 AB27 的值更改为相应县的值,我建议如下:

  1. 确定提供 B3 单元格的范围,并将该范围内的数据放入一个 pandas 数据框或一个简单列表 - 这将是您的主要迭代源
  2. 创建一个新列表,您将在其中存储实际人均健康成本数据
  3. 遍历前面提到的县列表
  4. 在每次迭代中,将 B3 的值设置为当前迭代元素
  5. 将 AB27 的值与县名一起附加到结果列表中,例如作为字典

代码示例:

import xlwings as xw
import pandas as pd

workbook = xw.Book('D:/Book1.xlsx')
report = workbook.sheets['Sheet1']
county_sheet = workbook.sheets['Sheet2']
counties = county_sheet.range('A1:A3')
results = []
for county in counties:
    report.range('A1').value = county.value
    results.append(
        {
            'County': county.value,
            'Actual Health Costs per Capita': report.range('A2').value
        }
    )

df = pd.DataFrame(results)

【讨论】:

  • 感谢您的帮助!这对我来说很有意义,尽管我在尝试这种方法时遇到了错误。它给了我报告['B3'].value = County.value 的属性错误,并说'str'项目没有属性'value'。有什么想法吗?
  • 已编辑,尝试从 report['B3'] 和 report['AB27'] 中删除 .value
  • 这对报告有用,但现在它抱怨county.value,说元组没有属性值。
  • 你是对的。还有一些其他问题——毕竟用 openpyxl 是不可能的。因此,请查看我使用 xlwings 库进行的编辑。我对此进行了测试,并在我的虚拟 excel 文件中为我工作得很好。由于 xlwings 使用 MS Excel 引擎,您必须在运行脚本的机器上安装 MS Excel。我脚本中的 A2 是 AB27,而 A1 是 Excel 文件中的 B3。如果对你有用,请采纳答案,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多