按单元格值提取 excel 数据:python PANDAS

Posted

技术标签:

【中文标题】按单元格值提取 excel 数据:python PANDAS【英文标题】:Pulling excel data by cell values: python PANDAS 【发布时间】:2021-07-01 00:49:50 【问题描述】:

我对 pandas 很陌生,我正在尝试读取一个 excel 文件并根据特定的单元格值将数据返回给我。

我有一个 excel 工作簿,其中有几张表格,表格中的数据如下所示。

  LUID       DATE & TIME IN  S# - IN         STATUS      S# - OUT      DATE & TIME OUT
PTLZ191238    2021-02-21      S12345     LOADING (OUT)   s123456          2021-03-01

我已经能够遍历工作簿表,现在我希望仅在 DATE & TIME IN 具有值且 DATE & TIME OUT 时返回数据为空白。 这是我目前的代码

import pandas as pd

#main Tyr Workbook
xl_file = 'excel_workbook.xlsm'

worksheets
fwd = pd.read_excel(xl_file, sheet_name='sheet1`')
epes = pd.read_excel(xl_file,sheet_name='sheet2')
mvt = pd.read_excel(xl_file,sheet_name='sheet3')
ls = pd.read_excel(xl_file,sheet_name='sheet4')
knight = pd.read_excel(xl_file,sheet_name='sheet5')
hzl = pd.read_excel(xl_file,sheet_name='sheet6')
cfi = pd.read_excel(xl_file,sheet_name='sheet7')
hub = pd.read_excel(xl_file,sheet_name='sheet8')
eh = pd.read_excel(xl_file,sheet_name='sheet9')
ttl = pd.read_excel(xl_file,sheet_name='sheet10')

all_sheet = [fwd,epes,mvt,ls,knight,hzl,cfi,hub,eh,ttl]

for sheet in all_sheet:
    print(sheet.head(10))

我翻遍了文件,似乎找不到我的答案,任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

为了测试数据框,pandas 使用布尔索引。谓词可以是一个指定的值,或者在您的情况下,它可以是针对空或 NaN 的测试(“不是数字”,熊猫中的默认缺失值标记)。

最好用一个例子来展示:

sheet[sheet["DATE & TIME IN"] == '2021-02-21']

这里有数据框、数据框列、测试类型(相等)和我们要测试的值。

为了测试导入的值是否缺失,notna() 告诉我们它存在,isna() 测试是否缺失。

sheet[sheet["DATE & TIME IN"].notna()

sheet[sheet["DATE & TIME OUT"].isna()

如果我们要测试多个子句,我们必须将每个子句用括号括起来,并使用“&”代表AND 或“|”为OR

sheet[(sheet["DATE & TIME IN"].notna()) & (sheet["DATE & TIME OUT"].isna())]

一个数据框有一个名为“empty”的属性,它会告诉你是否有任何数据。有other ways of testing this。

把它们放在一起:

for sheet in all_sheet:
    # print(sheet.head(10))
    results = sheet[(sheet["DATE & TIME IN"].notna()) & 
                (sheet["DATE & TIME OUT"].isna())]
    if not results.empty:
        print(results.head(10))

请注意,如果您不想手动加载所有工作表,并且很乐意将数据框名称保留为工作表名称,则可以通过将列表传递给 pd 来一步加载所有工作簿。 read_excel (which gives you a dictionary of worksheets) 或使用 pd.ExcelFile (which gives you can Excel file object)。

all_sheet = pd.read_excel(xl_file, sheet_name=['sheet1', 'sheet2', 'sheet3', 'sheet4', 'sheet5', 'sheet6', 'sheet7', 'sheet8', 'sheet9', 'sheet10'])
all_sheet = []
for xls in pd.ExcelFile(xl_file):
    all_sheet.append(pd.ExcelFile.parse)

【讨论】:

以上是关于按单元格值提取 excel 数据:python PANDAS的主要内容,如果未能解决你的问题,请参考以下文章

Python-openpyxl对excel取消/合并单元格,以及修改单元格值

Excel VBA:复制增量单元格值

熊猫:将特定的 Excel 单元格值读入变量

Map的golang概念用法及如何把EXCEL各个工作表的单元格值按多维组合输出到Map

Excel在单元格值中转义引号或撇号

Excel:使用单元格值作为 SQL 查询的参数