2016-12-23 68 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的大小增加,则可能很明显。