对于当前的项目,我计划通过运行多个循环按时间范围过滤 JSON 文件,每次循环的范围略有不同。但是,下面的代码会产生TypeError: Invalid comparison between dtype=datetime64[ns] and dateline的错误after_start_date = df["Date"] >= start_date。
我已经尝试在 Python 代码以及相应的 JSON 文件中修改日期的格式。是否有任何智能调整来对齐日期类型/格式?
JSON 文件具有以下格式:
[
{"No":"121","Stock Symbol":"A","Date":"05/11/2017","Text Main":"Sample text"}
]
Run Code Online (Sandbox Code Playgroud)
相应的代码如下所示:
import string
import json
import pandas as pd
import datetime
from dateutil.relativedelta import *
# Loading and reading dataset
file = open("Glassdoor_A.json", "r")
data = json.load(file)
df = pd.json_normalize(data)
df['Date'] = pd.to_datetime(df['Date'])
# Create an empty dictionary
d = dict()
# Filtering by date
start_date = datetime.date.fromisoformat('2017-01-01')
end_date = …Run Code Online (Sandbox Code Playgroud) 对于一个项目,我正在运行大量针对某些搜索词的 Scrapy 请求。这些请求使用相同的搜索词,但时间范围不同,如下面的 URL 中的日期所示。
尽管 URL 引用的日期和页面不同,但我收到的值与所有请求的输出值相同。看起来脚本正在获取获得的第一个值,并将相同的输出分配给所有后续请求。
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'quotes'
allowed_domains = ['google.com']
start_urls = ['https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2004%2Ccd_max%3A12%2F31%2F2004&tbm=nws',
'https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2005%2Ccd_max%3A12%2F31%2F2005&tbm=nws',
'https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2006%2Ccd_max%3A12%2F31%2F2006&tbm=nws',
]
def parse(self, response):
item = {
'search_title': response.css('input#sbhost::attr(value)').get(),
'results': response.css('#resultStats::text').get(),
'url': response.url,
}
yield item
Run Code Online (Sandbox Code Playgroud)
我找到了一个讨论与 BeautifulSoup 类似问题的线程。解决方案是向脚本添加标头,从而使其使用浏览器作为用户代理:
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
}
payload = {'as_epq': 'James Clark', 'tbs':'cdr:1,cd_min:01/01/2015,cd_max:01/01/2015', 'tbm':'nws'}
r = requests.get("https://www.google.com/search", params=payload, headers=headers)
Run Code Online (Sandbox Code Playgroud)
不过,在 Scrapy 中应用标头的方法似乎有所不同。有谁知道如何最好地将它包含在 Scrapy 中,特别是参考start_urls …
对于当前的项目,我计划将两个非常大的 CSV 文件与 Dask 合并,作为 Pandas 的替代方案。我已经彻底安装了Dask pip install "dask[dataframe]"。
然而,在跑步时import dask.dataframe as dd,我收到了反馈ModuleNotFoundError: No module named 'dask.dataframe'; 'dask' is not a package。
几个用户似乎遇到了同样的问题,并建议通过 Conda 安装该模块,这对我的情况也没有帮助。
找不到模块是什么原因?
对于当前项目,我计划运行以下脚本的多次迭代,并将结果保存在不同的 CSV 文件中,每次迭代都有一个新文件(CSV 部分位于脚本的末尾)。
给定的代码当前在终端中显示相关结果,而它只创建空的 CSV 文件。我花了几天时间想出如何解决这种情况,但无法找到解决方案。有没有人可以帮忙?
注意:我已根据用户建议更新了代码,而原始问题/挑战仍然存在。
import string
import json
import csv
import pandas as pd
import datetime
from dateutil.relativedelta import *
import numpy as np
import matplotlib.pyplot as plt
# Loading and reading dataset
file = open("Glassdoor_A.json", "r")
data = json.load(file)
df = pd.json_normalize(data)
df['Date'] = pd.to_datetime(df['Date'])
# Allocate periods for individual CSV file names
periods = pd.period_range('2009Q1','2018Q4',freq='Q')
ts = pd.Series(np.random.randn(40), periods)
type(ts.index)
intervals = ts.index
# Create individual empty files with headers
for i in intervals: …Run Code Online (Sandbox Code Playgroud)