全部归来而不是1乘1

时间:2017-11-21 16:16:23

标签: python pandas selenium

有多个Content-child。 但结果是1比1返回。

element1 = driver.find_element_by_xpath("//div[@id='Content']")
element2 = driver.find_elements_by_xpath("//div[@class='Content-child']")

for element3 in element2:
    element3_list = element3.text

    df = pd.DataFrame(element3_list, columns=['a','b','c'])
    pd.set_option('display.max_colwidth', -1)
    print(tabulate(df, headers='keys', tablefmt='psql'))

---- ---- RESULT

+--+----+----+----+
|   | a  | b  | c  |
+---|----+----+----+
| 0 | 3  | 1  | 21 |
+---+----+----+----+

+--+----+----+----+
|   | a  | b  | c  |
+---|----+----+----+
| 0 | 5  | 8  | 41 |
+---+----+----+----+

我的期望

+--+----+----+----+
|   | a  | b  | c  |
+---|----+----+----+
| 0 | 3  | 1  | 21 |
+---+----+----+----+
| 1 | 5  | 8  | 41 |
+---+----+----+----+

是循环错误还是有任何可以组合它的模块?

2 个答案:

答案 0 :(得分:1)

您在for element3 in element2循环的每个步骤中创建新数据框。然后打印这样创建的数据框。

您应该做的是在循环之前创建一个(可能为空)DataFrame ,然后使用append方法为每个element3追加到现有数据框的行添加行,并且最终打印结果 离开循环。

BTW使用pd.concat方法查看上述链接末尾的示例。这个应该是完美的满足您的需求。

答案 1 :(得分:1)

让我们将您的df恢复为for循环中的list

l=[]
for element3 in element2:
    element3_list = element3.text

    l.append(pd.DataFrame(element3_list, columns=['a','b','c']))

df=pd.concat(l).reset_index(drop=True)