python - python pandas ValueError:值的长度与索引的长度不匹配
问题描述
这段代码的目的是抓取一堆不同长度的数据表(每张表的行数不同),把它们变成pandas数据框,去掉一些不必要的列并修复日期。
除了确定日期外,上述所有工作都可以。
我试图通过使用重建日期创建一个新列来完全重建日期。
但是当我尝试这段代码时:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import pandas as pd
from datetime import datetime
from tzlocal import get_localzone
class DataEngine:
def __init__(self):
self.urls = open(r"C:\Users\Sayed\Desktop\script\sample.txt").readlines()
self.driver = webdriver.Chrome(r"D:\Projects\Tutorial\Driver\chromedriver.exe")
self.wait = WebDriverWait(self.driver, 10)
def title(self):
names = []
for url in self.urls:
self.driver.get(url)
title = self.driver.find_element_by_xpath('//*[@id="leftColumn"]/h1').text
names.append(title)
return names
def table(self):
DataFrames = []
for url in self.urls:
self.driver.get(url)
while True:
try:
item = self.wait.until(
ec.visibility_of_element_located((By.XPATH, '//*[contains(@id,"showMoreHistory")]/a')))
self.driver.execute_script("arguments[0].click();", item)
except Exception:
break
df = pd.DataFrame(columns=['Release Date', 'Time', 'Actual', 'Forecast', 'Previous'])
pos = 0
for table in self.wait.until(
ec.visibility_of_all_elements_located((By.XPATH, '//*[contains(@id,"eventHistoryTable")]//tr'))):
data = [item.text for item in table.find_elements_by_xpath(".//*[self::td]")]
if data:
df.loc[pos] = data[0:5]
pos += 1
df = df.head(50)
DataFrames.append(df)
return DataFrames
def date(self):
Dates = []
dfs = []
tables = self.table()
for df in tables:
df["Date"] = df["Release Date"].apply(lambda date: date[:12]) + " " + df["Time"]
for date in df["Date"]:
date = datetime.strptime(date.strip(), '%b %d, %Y %H:%M')
Dates.append(date)
df["Date"] = Dates
df['Date'] = df['Date'].dt.tz_localize('EST').dt.tz_convert(get_localzone())
df = df[['Date', 'Actual', 'Forecast', 'Previous', 'Release Date', 'Time']]
df = df.drop(df.columns[-4:], axis=1).reset_index(drop=True)
print(df.head())
dfs.append(df)
return dfs
我收到了这个错误:
回溯(最近一次通话最后):
DataEngine().date() 中的文件“D:/Projects/Tutorial/database.py”,第 94 行
文件“D:/Projects/Tutorial/database.py”,第 57 行,日期 df["Date"] = Dates
文件“C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\frame.py”,第 3119 行,在setitem
self._set_item(key, value)
_set_item 中的文件“C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\frame.py”,第 3194 行
value = self._sanitize_column(key, value)
_sanitize_column 中的文件“C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\frame.py”,第 3391 行
value = _sanitize_index(value, self.index, copy=False)
_sanitize_index 中的文件“C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\series.py”,第 4001 行
raise ValueError('Length of values does not match length of ' 'index')
ValueError:值的长度与索引的长度不匹配
解决方案
推荐阅读
- javascript - Next Js 服务端 Api 读写 JSON
- angular - 登录后的角度重定向-> 404
- git - 从索引中删除文件后 git commit -a 如何工作
- python - Python脚本完成但进程仍然存在
- excel - 将 ADODB 查询的结果复制到工作表
- ruby-on-rails - Rails 表单不提交
- android - 参数类型“Container Function(BuildContext, int)”不能分配给参数类型“Widget Function(BuildContext, int, int)”。镖
- c++ - 无法将 boost::serialization 与 Clion 和 CMAKE 链接起来
- python - C++ 有像 Python 字典这样的数据结构吗?
- python - 我会通过长期运行这个循环来堵塞我的记忆吗?