如何在Pandas DataFrame中新增常数列并解决构造器调用报错
代码报错核心原因
pd.read_html()的返回值是由匹配到的表格生成的DataFrame组成的列表,即使页面仅存在1个符合条件的表格,返回结果也是长度为1的列表。代码中直接将列表赋值给df变量,没有取出列表内实际的DataFrame对象,后续操作自然触发构造异常。- 新增列的语法使用错误:代码中
df[:,"RaceNo": RACENo]是NumPy多维数组的切片写法,既不符合Pandas新增列的语法规则,也无法实现固定值列填充的效果;另外提前将提取到的RaceNo转为Pandas Series属于多余操作,常量值可以直接赋值给整列。 - 定义的URL字符串存在无意义换行,且保留了HTML转义字符
&,实际发起请求时可能携带多余字符,存在URL参数解析失败的隐患。
修正后实现代码
import time from bs4 import BeautifulSoup import pandas as pd from selenium.webdriver import Chrome from selenium.webdriver.chrome.service import Service s = Service(executable_path=r'D:\Python3104\chromedriver.exe') driver = Chrome(service=s) driver.maximize_window() # 移除URL内的多余换行和HTML转义字符,避免参数解析异常 url = "http://racing.hkjc.com/racing/information/Chinese/Reports/CORunning.aspx?Date=20220701&RaceNo=2" driver.get(url) time.sleep(3) soup = BeautifulSoup(driver.page_source, "html.parser") # 提取RaceNo时去除前后空白,可按需转为整数类型 race_no = driver.current_url.split("RaceNo=")[1].strip() # 取read_html返回列表的第一个元素,即为目标表格对应的DataFrame df = pd.read_html(str(soup.find("table", class_="table_bd f_fs13")))[0] # 直接为整列赋值常量即可完成新列添加 df["RaceNo"] = race_no # 操作完成后关闭浏览器实例 driver.quit()
代码运行后可通过
print(df.head())查看前5行数据,确认RaceNo列已正确填充为URL中提取到的值。
内容的提问来源于stack exchange,提问作者Kelvin Yeung
相关产品推荐
相关产品推荐

