2016-12-23 116 views
1

我有一個熊貓數據幀包括聊天機器人的數據,我想打印用戶的輸入響應特定聊天機器人的消息如:打印下一行

(Row 1) Bot: Hi, What are your hobbies? 
(Row 2) User1: Cricket, FootBall 
(Row 3) Bot: Hi, What is your name? 
(Row 4) User2: Alexa 
(Row 5) Bot: Hi, What are your hobbies? 
(Row 6) User3: Tennis, Baseball 

所以基本上我有一個6行1列的數據框,我想打印用戶對特定問題的輸入:「嗨,你有什麼愛好?」只要。

我嘗試下面的代碼打印出機器人的問題,但我無法找到一個方法來獲取用戶的回答這個具體的問題。

for i in Chat_Column: 
    if i =="Bot: Hi, What are your hobbies?":   
     print (i); 

基本上我想在這種情況下,輸出是:

User1: Cricket, FootBall 
User3: Tennis, Baseball 
+0

如果你打算用熊貓DataFrames工作,你應該原產於大熊貓的索引選項堅持,而不是原生的Python迭代。它們速度更快,雖然可能不如python那麼直觀(特別是如果你不習慣它們),從長遠來看,它實際上是一個很大的節省時間的方法。 – pshep123

回答

2

你應該先得到相匹配的行索引DataFrame的index函數的問題。要與您的問題部分匹配,請使用str.contains

df = pd.DataFrame({'data': 
       ["(Row 1) Bot: Hi, What are your hobbies?", 
       "(Row 2) User1: Cricket, FootBall",        
       "(Row 3) Bot: Hi, What is your name?", 
       "(Row 4) User2: Alexa", 
       "(Row 5) Bot: Hi, What are your hobbies?", 
       "(Row 6) User3: Tennis, Baseball"] 
       }) 

idx = df[df['data'].str.contains("Hi, What are your hobbies?")].index.tolist() 
for i in idx: 
    if i < len(df) - 1: 
    print(df.iloc[i + 1].values[0]) 

輸出:

(Row 2) User1: Cricket, FootBall 
(Row 6) User3: Tennis, Baseball 

所以,在上面的代碼,idx擁有符合您查詢索引列表。在最後一行中,您將打印與這些索引相對應的下一行值。

+0

在打印行中獲取以下錯誤: –

+0

AttributeError:'NoneType'對象沒有屬性值' –

+0

@InheritedGeek您使用的是什麼python,pandas版本?複製和粘貼上面的代碼可以很好地與python 2.7.11,pandas 0.18.1一起工作。用Python 3+進行檢查,出現了打印問題。現在修復並應該正常工作。 – CentAu

0

使用數據幀從申報@CentAu

import pandas as pd 

Chat_Column = pd.DataFrame({'data': 
       ["(Row 1) Bot: Hi, What are your hobbies?", 
       "(Row 2) User1: Cricket, FootBall", 
       "(Row 3) Bot: Hi, What is your name?", 
       "(Row 4) User2: Alexa", 
       "(Row 5) Bot: Hi, What are your hobbies?", 
       "(Row 6) User3: Tennis, Baseball"] 
       }) 

for ndx, row in Chat_Column.iterrows(): 
    if "Bot: Hi, What are your hobbies?" in row["data"]: 
     print(Chat_Column.iloc[ndx+1]["data"]) 
+0

TypeError:不能將'int'對象隱式轉換爲str –

0
d = {'a':['Question1','Answer1','Question2','Answer2','Question3','Answer3']} 
df = pd.DataFrame(d) 
print df['a'].shift(-1)[df['a'] == 'Question2'].values[0] 

但我會建議把數據框放入兩列(Quesiton和答案)。

值得注意的是 - 使用熊貓本地索引將比遍歷字符串列表和測試每個迭代中的if語句快得多。也就是說,如果它只有幾百行/千行,可能無關緊要,但如果DataFrame的大小增加,則可能很明顯。