Используя приведенный ниже код, я загрузил несколько файлов CSV с веб-сайта:
# Import Key Modules
from bs4 import *
from bs4 import BeautifulSoup
import requests
import re
import pandas as pd
import numpy as np
import glob, os
# Get Futures
def main(url):
with requests.Session() as req:
r = req.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
target = [f"{url[:20]}{item['href']}" for item in soup.select(
"a[href$='VX.csv']")]
for x in target:
print(f"Downloading {x}")
r = req.get(x)
name = x.rsplit("/", 1)[-1]
with open(name, 'wb') as f:
f.write(r.content)
main("https://www.cboe.com/products/futures/market-data/historical-data-archive")
Код успешно загрузил необходимые файлы в мой рабочий каталог:
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_F18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_G18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_H18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_J18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_K18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_M18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_N18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_Q18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_U18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_V18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_X18_VX.csv
Downloading https://www.cboe.com/Publish/ScheduledTask/MktData/datahouse/CFE_F17_VX.csv
Что бы я хотел нравится делать: читаются определенные c столбцы из нескольких файлов csv, в том порядке, в котором они были загружены .
Вот что я пробовал:
# Folder with Files
files = glob.glob('data/*.csv')
# Read Mutiple CSV Files from the Folder into the Dataframe, Rearrange Columns, Rename Some Columns
df = pd.concat([pd.read_csv(fp).assign(Contract=os.path.basename(fp).split('.')[0]) for fp in files])
df = df[['Trade Date', 'Contract', 'Futures', 'Open', 'High', 'Low',
'Close', 'Settle', 'Change', 'Total Volume', 'EFP', 'Open Interest']]
df = df.rename(columns={'Trade Date':'Date',
'Total Volume':'Volume',
'Open Interest':'Open_Interest'})
df['Date'] = pd.to_datetime(df['Date'])
# Remove Unwanted Variables from Ticker Names and Save the File
df['Contract'] = df['Contract'].map(lambda x: x.lstrip('CFE_').rstrip('_VX'))
df.to_csv("vxdata.csv")
df.head()
Это дает мне следующий код ошибки:
---------------------------------------------------------------------------
ParserError Traceback (most recent call last)
<ipython-input-3-1e010a7d272a> in <module>
1 # Read Mutiple CSV Files from the Folder into the Dataframe, Rearrange Columns, Rename Some Columns
2
----> 3 df = pd.concat([pd.read_csv(fp).assign(Contract=os.path.basename(fp).split('.')[0]) for fp in files])
4 df = df[['Trade Date', 'Contract', 'Futures', 'Open', 'High', 'Low',
5 'Close', 'Settle', 'Change', 'Total Volume', 'EFP', 'Open Interest']]
<ipython-input-3-1e010a7d272a> in <listcomp>(.0)
1 # Read Mutiple CSV Files from the Folder into the Dataframe, Rearrange Columns, Rename Some Columns
2
----> 3 df = pd.concat([pd.read_csv(fp).assign(Contract=os.path.basename(fp).split('.')[0]) for fp in files])
4 df = df[['Trade Date', 'Contract', 'Futures', 'Open', 'High', 'Low',
5 'Close', 'Settle', 'Change', 'Total Volume', 'EFP', 'Open Interest']]
Есть ли у кого-нибудь какие-нибудь подсказки о том, что я делаю неправильно, и, что наиболее важно, как я могу это исправить?