pandas 可以根据值而不是行隐式确定 header 吗?
Can pandas implicitly determine header based on value, not row?
我与使用 Excel 的人一起工作,并不断添加或减去我不知道的行。我必须从文档中抓取数据,找到 header 的行会根据心情而变化。
我的挑战是通过检测 header 的位置来处理这些振荡电流。
我首先使用 xlrd
和一些使用工作簿中的值的条件语句来组织我的抓取。
我最初的尝试是有效的,而且很长(所以我不会发布它)但涉及引入整个 sheet,而不是切片:
from xlrd import open_workbook
book = open_workbook(fName)
sheet = book.sheet_by_name(sht)
return book,sheet
然而,它很大,我更希望得到更有针对性的选择。 header 值永远不会改变,当数据出现在该行之后时也不会改变。
您是否知道使用 pandas.ExcelFile
或 pandas.read_excel
根据 sheet 中找到的值隐式获取 header 的方法?
这是我对 pandas.ExcelFile
的尝试:
import pandas as pd
xlsx = pd.ExcelFile(fName)
dataFrame = pd.read_excel(xlsx, sht,
parse_cols=21, merge_cells=noMerge,
header=header)
return dataFrame
除非我为调用提供正确的 header 值,否则我无法使代码工作,这正是我希望避免的。
这个 previous question 似乎提出了一个类似的问题,但没有解决隐式查找 header 的问题。
对 ExcelFile 对象执行相同的循环:
xlsx = pd.ExcelFile(fName)
sheet = xlsx.sheet_by_name(sht)
# apply the same algorithm you wrote against xlrd here
# ... results in having header_row = something, 0 based
dataFrame = pd.read_excel(xlsx, sht,
parse_cols=21, merge_cells=noMerge,
skip_rows=header_row)
我与使用 Excel 的人一起工作,并不断添加或减去我不知道的行。我必须从文档中抓取数据,找到 header 的行会根据心情而变化。
我的挑战是通过检测 header 的位置来处理这些振荡电流。
我首先使用 xlrd
和一些使用工作簿中的值的条件语句来组织我的抓取。
我最初的尝试是有效的,而且很长(所以我不会发布它)但涉及引入整个 sheet,而不是切片:
from xlrd import open_workbook
book = open_workbook(fName)
sheet = book.sheet_by_name(sht)
return book,sheet
然而,它很大,我更希望得到更有针对性的选择。 header 值永远不会改变,当数据出现在该行之后时也不会改变。
您是否知道使用 pandas.ExcelFile
或 pandas.read_excel
根据 sheet 中找到的值隐式获取 header 的方法?
这是我对 pandas.ExcelFile
的尝试:
import pandas as pd
xlsx = pd.ExcelFile(fName)
dataFrame = pd.read_excel(xlsx, sht,
parse_cols=21, merge_cells=noMerge,
header=header)
return dataFrame
除非我为调用提供正确的 header 值,否则我无法使代码工作,这正是我希望避免的。
这个 previous question 似乎提出了一个类似的问题,但没有解决隐式查找 header 的问题。
对 ExcelFile 对象执行相同的循环:
xlsx = pd.ExcelFile(fName)
sheet = xlsx.sheet_by_name(sht)
# apply the same algorithm you wrote against xlrd here
# ... results in having header_row = something, 0 based
dataFrame = pd.read_excel(xlsx, sht,
parse_cols=21, merge_cells=noMerge,
skip_rows=header_row)