将文本解析为数据框

时间:2020-07-10 18:07:56

标签: python-3.x pandas

我正在使用urllib从以下网站https://marketdata.theocc.com/series-search?symbolType=U&symbol=GOOGL递归收集报告(文本文件)。我想避免保存此文本文件,因为我需要重复该操作。文本文件看起来像这样

Series Search Results for GOOGL

Products for this option symbol are traded on: 
AMEX ARCA BATS BOX C2 CBOE EDGX EMLD GEM ISE MCRY MIAX MPRL NOBO NSDQ PHLX 

        Series/contract     Strike          Open Interest           
ProductSymbol   year    Month   Day Integer Dec C/P Call    Put Position Limit  
GOOGL       2020    07  10  750 000 C P     0   104 25000000
GOOGL       2020    07  10  760 000 C P     0   0   25000000
GOOGL       2020    07  10  770 000 C P     0   0   25000000

我对ProductSymbol之后立即开始的行以及以熊猫数据框格式显示的年,月,日(=到期日期)和整数,十二月(=终止)列感兴趣,如下所示:

Expiry     Strike
2020-07-10 750.000
...

首先,我不确定如何删除前几行(除了蛮力,即在for循环中进行测试)。此外,当我使用以下内容时:

symbol = 'GOOGL'
url = 'https://marketdata.theocc.com/series-search?symbolType=O&symbol=' + symbol
file = urllib.request.urlopen(url)
#Method 1:
for line in file:
    decoded = line.decode('UTF-8')
    print(decoded)
#Method2:
df = pd.read_csv(file, sep=',' + '\t', engine='python')
print(df)

我得到以下打印输出:

Method1:
GOOGL       2020    07  10  750 000 C P     0   104 25000000

Method2: 
GOOGL \t\t2020\t07\t10\t750\t000\tC P

所以method1确实在产生一些正确分隔的行,但这意味着我必须遍历每一行。 Method2确实显示了一个数据框,但包含未合并的数据:不幸的是,对我而言,我感兴趣的5列已合并。我猜没有考虑sep ='\ t',因为它应该在字符串值级别进行。因此,这是否意味着我必须遍历行并进行一些字符串拆分才能取消合并数据?还是有一种更直接,更优雅的处理方式?

0 个答案:

没有答案