2016-09-15 11 views
2

Pandasを使用してExcelファイルを解析しようとしています。私はシートから値(name)を取得する場合Pandas:Excelファイルのdf.locから値を印刷しようとしたときのKeyError

import pandas as pd 
import xlrd 

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

df = xl_file.parse("Sheet1") 

は今、:

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 

問題がある可能性がありますか?

答えて

3

nameはシリーズであり、0はシリーズのインデックスにありません(チェックname.index)。これは、エラーメッセージを説明します。

あなたはシリーズの最初の要素を選択する場合は、ん:

name.iloc[0] 
+0

おかげで、私はそれが自身のインデックスです使用して、私のExcelファイルをされて推測していますか? (オンラインソースからダウンロード)。私が探していた値のインデックスは '[1]'であり、 '[0]'ではありません。 – Winterflags

+1

Excelの行番号とpandasインデックスの関係はわかりません。しかし、 'name'はフィルタリングの結果(first name John)なので、どのインデックス値がインデックス内にあるのかそうでないのかを事前に知る方法はありません。 – IanS

関連する問題