我使用last来过滤日期数据。但是,它似乎不起作用。无论是时间框架即7D和我相信14D返回更多的数据比他们应该。CAT的7D不应返回任何数据。我也试过1W,结果也一样。是我做错了还是Pandas做错了?
收集数据的方法如下。
# Gets the openinsider information for insider trading of stocks
def get_openinsider_stock_activity(stocks):
# Format search string from stocks
# URL gets 500 entries only
stocks = stocks.upper().replace(' ', '+') # format the tickers to be lis
print('Search String: ', stocks)
url = f'http://openinsider.com/screener?s={stocks}&o=&pl=&ph=&ll=&lh=&fd=1461&fdr=&td=0&tdr=&fdlyl=&fdlyh=&daysago=&xp=1&xs=1&vl=&vh=&ocl=&och=&sic1=-1&sicl=100&sich=9999&grp=0&nfl=&nfh=&nil=&nih=&nol=&noh=&v2l=&v2h=&oc2l=&oc2h=&sortcol=0&cnt=300&page=1'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
try:
rows = soup.find('table', {'class': 'tinytable'}).find('tbody').findAll('tr')
except Exception as e:
print("Error! Skipping")
print(f"This URL was not successful: {url}")
print(e)
return
# Get headers first
header_row = soup.find('table', {'class': 'tinytable'}).find('thead').findAll('tr')
headers = []
for row in header_row:
for col in row:
for header in col:
text = col.text.strip()
if text == '':
continue
headers.append(unicodedata.normalize('NFKD', text))
body_rows = soup.find('table', {'class': 'tinytable'}).find('tbody').findAll('tr')
# Iterate over rows of table
insider_data = []
for row in body_rows:
cols = row.findAll('td')
if not cols:
continue
for cell in cols:
cell_value = cell.find('a').text.strip() if cell.find('a') else cell.text.strip()
body = {key: cols[index].find('a').text.strip() if cols[index].find('a') else cols[index].text.strip()
for index, key in enumerate(headers)}
insider_data.append(body)
insider_data = pd.DataFrame(insider_data)
return insider_data
字符串
使用.last()过滤数据的方法如下
data = []
for stock in ['AAPL', 'BA', 'GME', 'XOM', 'CAT']:
data.append(get_openinsider_stock_activity(stock))
data = pd.concat(data)
for timeframe in ['7D', '14D', '1M']:
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.max_rows', None)
count_data = data.copy()
count_data['Trade Date'] = pd.to_datetime(count_data['Trade Date'])
# HERE
count_data = count_data.sort_values(by='Trade Date', ascending=True).set_index('Trade Date').last(timeframe)
print(count_data)
型
如果我们检查CAT here,我们可以设置1周前没有买家,因为没有表显示。然而,我的代码显示有一个卖家,但该记录应该只在2周前。
1条答案
按热度按时间rsl1atfo1#
如果你读了documentation,在最后它特别指出了让你绊倒的行为。
请注意,返回的是最近3个日历日的数据,而不是数据集中最近3个观察日的数据,因此未返回2018-04-11的数据。
你可以在这个例子中看到:
字符串
产出
型
您可能需要查找的是相对日期偏移量,例如今天之前的n天:
型
返回一个空的数据框,因为在过去的3个日历日内没有记录,并且:
型
按预期只返回两条记录