我搜索了與此有關的以前的答案,但這些答案似乎利用numpy,因爲該數組包含數字。我試圖在數據框('時間範圍')中的句子中搜索關鍵字,其中完整句子是'__中的時間範圍',並且想要返回列和行索引。例如:Python/Pandas返回找到的字符串的列和行索引
df.iloc[34,0]
返回字符串我正在尋找,但我避免了動態原因的硬代碼。有沒有辦法返回[34,0]當我搜索數據框的關鍵字「時限」
我搜索了與此有關的以前的答案,但這些答案似乎利用numpy,因爲該數組包含數字。我試圖在數據框('時間範圍')中的句子中搜索關鍵字,其中完整句子是'__中的時間範圍',並且想要返回列和行索引。例如:Python/Pandas返回找到的字符串的列和行索引
df.iloc[34,0]
返回字符串我正在尋找,但我避免了動態原因的硬代碼。有沒有辦法返回[34,0]當我搜索數據框的關鍵字「時限」
編輯:
對於考覈指標需要contains
與boolean 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]
如果你有多個列在那裏尋找到你可以使用下面的代碼示例:
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]]
那麼對於df
和result
輸出將是:
>>> 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]
您可以通過使用'df.index.get_loc'來訪問相應的行,如目標中所述。 – ayhan
@ayhan - 我重新打開它,因爲它似乎'get_loc'不是解決方案。 – jezrael
@jezrael是的,你是對的。 – ayhan