Pandas:尝试从 Excel 文件中的 df.loc 打印值时出现 KeyError

Posted

技术标签:

【中文标题】Pandas:尝试从 Excel 文件中的 df.loc 打印值时出现 KeyError【英文标题】:Pandas: KeyError when attempting to print value from df.loc in Excel file 【发布时间】:2017-01-23 09:40:03 【问题描述】:

我正在尝试使用 Pandas 解析 Excel 文件。

import pandas as pd
import xlrd

xl_file = pd.ExcelFile("file.xlsx")

df = xl_file.parse("Sheet1")

现在,如果我从工作表中得到一个值 (name):

if len(df.loc[df["Col A"].str.contains("John"), "Col B"]) > 0:
    name = df.loc[df["Col A"].str.contains("John"), "Col B"]

然后print name,结果是:

1    John Doe
Name: Col B, dtype: object

print name.values:

[u'John Doe']

但如果我尝试使用print name[0] 检索实际字符串,我会得到KeyError

  File "pandas/core/series.py", line 583, in __getitem__
    result = self.index.get_value(self, key)
  File "pandas/indexes/base.py", line 1980, in get_value
    tz=getattr(series.dtype, 'tz', None))
  File "pandas/index.pyx", line 103, in pandas.index.IndexEngine.get_value (pandas/index.c:3332)
  File "pandas/index.pyx", line 111, in pandas.index.IndexEngine.get_value (pandas/index.c:3035)
  File "pandas/index.pyx", line 159, in pandas.index.IndexEngine.get_loc (pandas/index.c:4018)
  File "pandas/hashtable.pyx", line 303, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6610)
  File "pandas/hashtable.pyx", line 309, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6554)
KeyError: 0

可能是什么问题?

【问题讨论】:

【参考方案1】:

name 是一个系列,0 不在系列的索引中(检查 name.index)。这解释了错误消息。

如果要选择系列中的第一个元素,请执行以下操作:

name.iloc[0]

【讨论】:

谢谢,我猜我的 Excel 文件正在使用它自己的索引? (从在线资源下载)。我正在寻找的值的索引是 [1] 而不是 [0] 恐怕我不知道Excel行号和熊猫索引之间的关系。但由于 name 是过滤的结果(名字 John),因此您无法提前知道哪些索引值会或不会出现在索引中。

以上是关于Pandas:尝试从 Excel 文件中的 df.loc 打印值时出现 KeyError的主要内容,如果未能解决你的问题,请参考以下文章

使用 python、pandas 合并 2 个基于 3 个条件的单独 excel 文件

使用 lambda 中的 pandas 从 s3 读取 excel 文件并转换为 csv

Python / Pandas:循环遍历数字列表

使用多个 excel 表加快 pandas 迭代

无法使用 read_excel 从 pandas 中的 xlsx 文件中读取日期列?

Pandas读取文件