迭代字典创建Pandas DataFrame时索引异常,如何存入同一行?
解决方案
你的问题出在每次循环都创建一个仅含单个键值对的字典并追加到列表,导致每个键值对单独占一行。要把单次迭代的所有属性值放到同一行,只需先把当前项的所有键值对整合到同一个字典里,再添加到数据列表。
修正后的代码
from selenium.webdriver.common.by import By import pandas as pd left = driver.find_elements(by=By.CLASS_NAME, value='lc') right = driver.find_elements(by=By.CLASS_NAME, value='rc') data = [] # 初始化空字典存储当前行的所有属性 current_row = {} for l, r in zip(left, right): l_text = l.text.strip() # 建议去除文本前后空白,避免列名异常 r_text = r.text.strip() current_row[l_text] = r_text # 将整行字典添加到数据列表 data.append(current_row) # 创建DataFrame,不同项目属性数量不同时,缺失的列会自动填充NaN df = pd.DataFrame(data)
多项目场景补充
如果页面上存在多个制动盘属性组(即需要生成多行数据),你需要先按项目分组元素,再对每个组执行上述逻辑。比如每个项目的属性都包裹在class="item"的容器中:
items = driver.find_elements(by=By.CLASS_NAME, value='item') data = [] for item in items: current_row = {} left = item.find_elements(by=By.CLASS_NAME, value='lc') right = item.find_elements(by=By.CLASS_NAME, value='rc') for l, r in zip(left, right): current_row[l.text.strip()] = r.text.strip() data.append(current_row) df = pd.DataFrame(data)
这样每个项目的所有属性会被整合到DataFrame的同一行,不同项目之间的属性差异会自动用NaN填充。
内容的提问来源于stack exchange,提问作者Sherwin R
相关产品推荐
相关产品推荐

