【问题标题】:Openpyxl to create dataframe with sheet name and specific cell values?Openpyxl 创建具有工作表名称和特定单元格值的数据框?
【发布时间】:2021-03-12 10:08:45
【问题描述】:

我需要做什么:

  • 在 Python/Pandas 中打开 Excel 电子表格
  • 使用 [name, balance] 创建 df

例子:

name balance
Jones Ministry 45,408.83
Smith Ministry 38,596.20
Doe Ministry 28,596.20

到目前为止我做了什么......

import pandas as pd
import openpyxl as op
from openpyxl import load_workbook
from pathlib import Path

那么……

# Excel File
src_file = src_file = Path.cwd() / 'lm_balance.xlsx'

df = load_workbook(filename = src_file)

我通过...查看了所有工作表名称

df.sheetnames

并创建了一个带有“名称”列的数据框

balance_df = pd.DataFrame(df.sheetnames) 

我的电子表格如下所示...

我现在需要遍历每张表并添加“期末资金余额”和相应的“价值”

  • “期末资金余额”位于不同的行,但始终位于最后一行。 “值”始终在“G”列中

我该怎么做?

我已经阅读了以下示例:

  • 自动化无聊的东西
  • Openpyxl 文档
  • PBPython.com 示例
  • 堆栈溢出问题

感谢您的帮助!

github 上的工作示例:Github: JohnMillstead: Balance_Study

【问题讨论】:

  • 不确定我是否理解您想要的最终输出。您的示例数据框不包含 balance_value
  • 我首先想从工作表选项卡中创建 balance['name'] —— 我做到了。接下来是根据 Excel 工作表列“G”中的值创建余额['期末资金余额'],其中“期末资金余额”以黄色突出显示。我不能使用第 # 行,因为“期末资金余额”可以在第 # 行上下移动,具体取决于特定工作表中的数据量。
  • 编辑注释:将“期末资金余额”更改为“余额”以简化事情并将原始数据框更改为 df。
  • 介意分享你到目前为止所做的事情和 Excel 表格吗?如果数据不敏感,可能是保管箱或其他一些共享服务
  • @sammywemmy 谢谢!我晚上要下班了。我将创建更多的虚拟数据以及我到目前为止所做的事情。再次感谢!

标签: python excel pandas openpyxl


【解决方案1】:

要获取单元格值,首先将data_only=True 设置为load_workbook,否则您最终可能会得到单元格公式。要获取工作表的最后一行,您可以使用ws.max_row。将前面的命令与已创建的数据框和 apply 结合起来,为每个工作表命名一个函数,以从该工作表的 G 列 (wb[x][f'G{wb[x].max_row}']) 获取最后一个值。

import pandas as pd
from openpyxl import load_workbook

src_file = 'test_balance.xlsx'
wb = load_workbook(filename = src_file, data_only=True)

df = pd.DataFrame(data=wb.sheetnames, columns=["name"])
df["balance"] = df.name.apply(lambda x: wb[x][f'G{wb[x].max_row}'].value)

print(df)

df的输出

                   name   balance
0        Jones Ministry  15100.08
1        Smith Ministry  45408.83
2        Stark Ministry   1561.75
3          Doe Ministry   7625.75
4       Bright Ministry   3078.30
5      Lincoln Ministry   6644.59
6     Martinez Ministry  11500.54
7       Patton Ministry   9782.65
8         Rich Ministry   8429.88
9        Seitz Ministry   2974.58
10       Bhiri Ministry    622.83
11  Pignatelli Ministry  34992.05
12      Cortez Ministry   -283.48
13      Little Ministry  13755.80
14     Johnson Ministry  -2035.31

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多