按单元格值提取 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取消/合并单元格,以及修改单元格值