2017-07-11 86 views
0

我搜索了與此有關的以前的答案,但這些答案似乎利用numpy,因爲該數組包含數字。我試圖在數據框('時間範圍')中的句子中搜索關鍵字,其中完整句子是'__中的時間範圍',並且想要返回列和行索引。例如:Python/Pandas返回找到的字符串的列和行索引

df.iloc[34,0] 

返回字符串我正在尋找,但我避免了動態原因的硬代碼。有沒有辦法返回[34,0]當我搜索數據框的關鍵字「時限」

+0

您可以通過使用'df.index.get_loc'來訪問相應的行,如目標中所述。 – ayhan

+0

@ayhan - 我重新打開它,因爲它似乎'get_loc'不是解決方案。 – jezrael

+0

@jezrael是的,你是對的。 – ayhan

回答

1

編輯:

對於考覈指標需要containsboolean indexing,但隨後有可能的3個值:

df = pd.DataFrame({'A':['Timeframe for wave in ____', 'a', 'c']}) 
print (df) 
          A 
0 Timeframe for wave in ____ 
1       a 
2       c 



def check(val): 
    a = df.index[df['A'].str.contains(val)] 
    if a.empty: 
     return 'not found' 
    elif len(a) > 1: 
     return a.tolist() 
    else: 
     #only one value - return scalar 
     return a.item() 
print (check('Timeframe')) 
0 

print (check('a')) 
[0, 1] 

print (check('rr')) 
not found 

舊的解決方案:

看來你需要的,如果需要numpy.where的校驗值Timeframe

df = pd.DataFrame({'A':list('abcdef'), 
        'B':[4,5,4,5,5,4], 
        'C':[7,8,9,4,2,'Timeframe'], 
        'D':[1,3,5,7,1,0], 
        'E':[5,3,6,9,2,4], 
        'F':list('aaabbb')}) 

print (df) 
    A B   C D E F 
0 a 4   7 1 5 a 
1 b 5   8 3 3 a 
2 c 4   9 5 6 a 
3 d 5   4 7 9 b 
4 e 5   2 1 2 b 
5 f 4 Timeframe 0 4 b 


a = np.where(df.values == 'Timeframe') 
print (a) 
(array([5], dtype=int64), array([2], dtype=int64)) 

b = [x[0] for x in a] 
print (b) 
[5, 2] 
+0

謝謝jezrael!有一件事我沒有意識到會更成問題的是,時間表並不是整個單詞。我最初嘗試做一個df [df =='Timeframe']類型的搜索,期望它找到Timeframe的第一個實例。但是由於時間範圍是句子的一部分,因此不會返回結果。完整的句子是''inin'的時間框架'你有任何提示嗎? – codeninja

+0

嗯,輸出是位置?或輸出是全部句子? – jezrael

+0

因爲我的df只有一列,我只需要返回'in_in'的句子出現的那一行。這有助於澄清?所以在我的例子中,df.iloc [34,0]實際上對應於句子出現的地方 – codeninja

1

如果你有多個列在那裏尋找到你可以使用下面的代碼示例:

import numpy as np 
import pandas as pd 
df = pd.DataFrame([[1,2,3,4],["a","b","Timeframe for wave in____","d"],[5,6,7,8]]) 
mask = np.column_stack([df[col].str.contains("Timeframe", na=False) for col in df]) 
find_result = np.where(mask==True) 
result = [find_result[0][0], find_result[1][0]] 

那麼對於dfresult輸出將是:

>>> df 
    0 1       2 3 
0 1 2       3 4 
1 a b Timeframe for wave in____ d 
2 5 6       7 8 
>>> result 
[1, 2] 
相關問題