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

Posted

技术标签:

【中文标题】熊猫:将特定的 Excel 单元格值读入变量【英文标题】:Pandas: Read specific Excel cell value into a variable 【发布时间】:2017-09-18 13:30:29 【问题描述】:

情况:

我正在使用pandas 来解析工作簿中的单独 Excel (.xlsx) 工作表,其设置如下:Python 3.6.0Anaconda 4.3.1 on Windows 7 x64.

问题:

我一直无法找到如何将变量设置为特定的 Excel 工作表单元格值,例如var = Sheet['A3'].value 来自 'Sheet2' 使用 pandas

问题:

这可能吗?如果是这样,怎么做?

我尝试过的:

我在dataframe 和各种论坛上搜索了pandas 文档,但没有找到答案。

我知道我可以使用openpyxl(我可以在其中指定单元格坐标)来解决这个问题,但我想要:

    使用pandas - 如果可能的话; 文件只读取一次。

我已经导入了numpy,还有pandas,所以能写:

xls = pd.ExcelFile(filenamewithpath) 

data = xls.parse('Sheet1')
dateinfo2 = str(xls.parse('Sheet2', parse_cols = "A", skiprows = 2, nrows = 1, header = None)[0:1]).split('0\n0')[1].strip()

'Sheet1' 被读入'data' 很好,因为我有一个收集我想要的范围的功能。

我还尝试从单独的工作表 ('sheet2') 中读取单元格 "A3" 中的值,而我目前拥有的代码很笨拙。它根据需要将值作为字符串取出,但绝不是漂亮的。我只想要这个单元格值和尽可能少的额外工作表信息。

【问题讨论】:

显然一种解决方案是读取整个列并将其分配给一个变量。然后只提取第三个条目。除非您拥有海量数据集,否则这可能是最简单的方法 【参考方案1】:

使用 Pandas 读取 Excel 文件将默认使用数据框。您不需要整个表格,只需要一个单元格。我这样做的方法是使该单元格成为标题,例如:

# Read Excel and select a single cell (and make it a header for a column)
data = pd.read_excel(filename, 'Sheet2', index_col=None, usecols = "C", header = 10, nrows=0)

将返回一个包含 1 个标头且没有数据的“列表”。然后隔离该标头:

# Extract a value from a list (list of headers)
data = data.columns.values[0]
print (data)

【讨论】:

【参考方案2】:

详细说明@FLab 的评论使用了类似的内容:

编辑:

更新了答案以对应于更新后的问题,即如何一次阅读一些表格。 因此,通过将sheet_name=None 提供给read_excel(),您可以一次读取所有工作表,并且pandas 返回一个dict 的DataFrames,其中键是Excel 工作表名称。

import pandas as pd
In [10]:

df = pd.read_excel('Book1.xlsx', sheetname=None, header=None)
df
Out[11]:
u'Sheet1':    0
 0  1
 1  1, u'Sheet2':     0
 0   1
 1   2
 2  10
In [13]:
data = df["Sheet1"]
secondary_data = df["Sheet2"]
secondary_data.loc[2,0]
Out[13]:
10

或者,如 this post 中所述,如果您的 Excel 文件有多个工作表,您可以传递 sheetname 一个字符串列表,例如要解析的工作表名称。

df = pd.read_excel('Book1.xlsx', sheetname=["Sheet1", "Sheet2"], header=None)

感谢 user6241235 挖掘出最后一个替代方案

【讨论】:

【参考方案3】:

您可以使用具有 skip_footer 参数的 pandas read_excel。 这应该可以工作,其中 skipendrows 是您要跳过的结束行数。

data = xls.read_excel(filename, 'Sheet2', parse_cols = "A", skipsrows = 2, skip_footer=skipendrows, header =None)

【讨论】:

以上是关于熊猫:将特定的 Excel 单元格值读入变量的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:用相邻的单元格值填充空单元格

(Excel) 引用另一个工作表中的单元格时,我可以将工作表名称作为单元格值传递吗?

如何在excel 中运算公式中引用单元格值

创建指向另一个 Excel 工作表单元格的链接,并查找最后一个单元格值

从 Excel 中的另一个单元格控制单元格值

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