Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代excel下拉菜单并提取数据_Python_Excel_Pandas - Fatal编程技术网

Python 迭代excel下拉菜单并提取数据

Python 迭代excel下拉菜单并提取数据,python,excel,pandas,Python,Excel,Pandas,我有一个数据集,其中包含美国每个县的医疗保健信息。我只是想从每个县提取一个值,即人均实际医疗成本(AB27) 我遇到的问题是,数据集使用下拉列表来提取每个县的信息。当我尝试创建熊猫数据框时,它只会得到下拉列表 理想情况下,我能够遍历数据集,并将每个县的名称和人均实际医疗成本(AB27)提取到数据框中 有什么想法吗 只使用熊猫会很麻烦 使用 B3中的下拉列表可能来自Excel文件中的某个范围。如果更改B3的值也会将AB27的值更改为相应县的值,我建议如下: 确定为B3单元馈电的范围,并将该范围的数

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

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

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

有什么想法吗


只使用熊猫会很麻烦

使用

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

  • 确定为B3单元馈电的范围,并将该范围的数据放入一个数据帧或一个简单列表中-这将是您的主要迭代源
  • 创建一个新列表,在其中存储人均实际医疗费用数据
  • 反复浏览前面提到的县列表
  • 在每次迭代中,将B3的值设置为当前迭代元素
  • 将AB27的值与县名称一起添加到结果列表中,例如作为dicts
  • 代码示例:

    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)
    

    我猜有一些VBA代码或类似的东西从数据库中提取数据并在excel中显示。你有没有看过excel的宏?@GeneBurinsky我在这里肯定是疯了,我对VBA和excel宏完全一无所知。不过,我确实认为你是对的,当我检查AB27单元格的内容时,它显示:=VLOOKUP($7,'State_county 2019'!$1:$1048576,MATCH(Report!A28,'State_county 2019'!$2:$2,0),0)谢谢你的代码。vlookup和match函数通常用于在excel中执行连接或数据合并,因此它没有我想象的那么复杂。据推测,所有数据都已在excel文件中。作为以下答案的替代方案,只需阅读整个报告表,然后使用pandas或其他python工具在数据行中找到“人均实际医疗成本”。啊,好的,这更简单。我会四处寻找一些关于如何扩展报告表的指南,但是如果你有任何建议,我将非常感谢你的帮助!这对我来说是有道理的,尽管我在尝试这种方法时遇到了一个错误。它给了我一个报告['B3'].value=country.value的属性错误,并说'str'项没有属性'value'。有什么想法吗?编辑后,尝试删除报表['B3']和报表['AB27']中的.value,它们对报表有效,但现在它抱怨country.value,说元组没有属性值。你是对的。还有一些其他问题——毕竟openpyxl是不可能的。因此,请参阅我使用xlwings库进行的编辑。我测试了它,并在我的虚拟excel文件中运行良好。由于xlwings正在使用MS Excel引擎,您必须在运行脚本的计算机上安装MS Excel。我脚本中的A2是AB27,A1是excel文件中的B3。如果它对你有效,请接受答案,谢谢。成功了,非常感谢!!