Это можно сделать без регулярных выражений, выполнив следующие манипуляции со строками (или что-то подобное) с данными в каждой строке.Используя первую строку в качестве примера:
option = "conId=357974235, symbol='SPX', lastTradeDateOrContractMonth='20190718', strike=2980.0, right='P', multiplier='100', exchange='SMART', currency='USD', localSymbol='SPX 190719P02980000', tradingClass='SPX'"
data = option.split(',')
to_delete = 0,3 #since apparently you aren't interested in 'conId' and 'strike'
for i in sorted(to_delete, reverse=True):
del data[i]
for datum in data:
if "localSymbol" in datum:
datum = datum.replace('SPX ','')
print(datum.split('=')[1])
Вывод:
'SPX'
'20190718'
'P'
'100'
'SMART'
'USD'
'190719P02980000'
'SPX'
Чтобы автоматизировать процесс, давайте предположим, что данные хранятся так:
option1 = "conId=357974235, symbol='SPX', lastTradeDateOrContractMonth='20190718', strike=2980.0, right='P', multiplier='100', exchange='SMART', currency='USD', localSymbol='SPX 190719P02980000', tradingClass='SPX'"
option2 = "conId=357974238, symbol='SPX', lastTradeDateOrContractMonth='20190718', strike=2985.0, right='P', multiplier='100', exchange='SMART', currency='USD', localSymbol='SPX 190719P02985000', tradingClass='SPX'"
так далее.Код выше затем изменяется следующим образом:
options = [option1, option2] #etc.
option_data = [] #this is a list of lists which will host all relevant data
to_delete = 0,3
for option in options:
data = option.split(',')
for i in sorted(to_delete, reverse=True):
del data[i]
current_datum = [] #this is a one time list that will store data for the current item
for datum in data:
if "localSymbol" in datum:
datum = datum.replace('SPX ','')
current_datum.append(datum.split('=')[1])
option_data.append(current_datum)
Наконец, создайте фрейм данных:
columns = ['symbol','last trade','right','multiplier','exchange','currency','local symbol','trading class']
df = pd.DataFrame(option_data, columns =columns)
df
Вывод:
symbol last trade right multiplier exchange currency local symbol trading class
0 'SPX' '20190718' 'P' '100' 'SMART' 'USD' '190719P02980000' 'SPX'
1 'SPX' '20190718' 'P' '100' 'SMART' 'USD' '190719P02985000' 'SPX'