如何创建输出数据框

时间:2019-05-28 13:53:48

标签: python urllib

我使用某些附加条件向网络服务器运行查询。 我指定了一个日期范围,该范围会更改网址中的日期。 然后,我将数据线拉到指定的交易品种,并得到指定库存和时间范围的空头数量清单。 但是,我希望能够将输出作为数据框获取。 现在,数据框仍然是上一次运行的url中存储的数据框,而不是输出中的数据框。

我尝试使用list_.append,但我没有上班。

import pandas as pd
from datetime import datetime
import urllib

symbols = ['AABA']

start_date = datetime(2019, 5, 10 )
end_date = datetime(2019, 5, 15 )

datelist = pd.date_range(start_date, periods=(end_date-start_date).days+1).tolist()

for date in datelist:
    url =  f"http://regsho.finra.org/FNYXshvol{date.strftime('%Y%m%d')}.txt"  

    try:
        df = pd.read_csv(url,delimiter='|')
        if any(df['Symbol'].isin(symbles)):
            stocks = df[df['Symbol'].isin(symbols)].to_string(index=False, header=False)
            print(stocks)
        else:
            print(f'No stock found for {date.date()}' )
    except urllib.error.HTTPError:
         continue 

现在的结果是:

20190510  AABA  2300.0  0.0  14617.0  N
20190513  AABA  2816.0  0.0  39128.0  N
20190514  AABA  1761.0  0.0  26191.0  N
20190515  AABA  24092.0  0.0  62745.0  N

我希望结果在数据框中,以便我可以将结果直接导出到csv

2 个答案:

答案 0 :(得分:0)

当要将输出作为数据帧时,为什么将数据帧转换为字符串? (例如,df[df['Symbol'].isin(symbols)].to_csv('ABBA.csv', index=False, header=False))无论如何,要将字符串转换回数据帧,您可以使用pandas.read_fwf

from io import StringIO

df=pd.read_fwf(StringIO(stocks), header=None)

输出:

          0     1        2    3        4  5
0  20190510  AABA   2300.0  0.0  14617.0  N
1  20190513  AABA   2816.0  0.0  39128.0  N
2  20190514  AABA   1761.0  0.0  26191.0  N
3  20190515  AABA  24092.0  0.0  62745.0  N

答案 1 :(得分:0)

stocks是将其转换为字符串之前的数据帧。只需将其保存为数据框,将其存储在列表中,然后合并该列表即可获得完整的数据框:

dflist = []
for date in datelist:
    url =  f"http://regsho.finra.org/FNYXshvol{date.strftime('%Y%m%d')}.txt"  

    try:
        df = pd.read_csv(url,delimiter='|')
        if any(df['Symbol'].isin(symbles)):
            stocks = df[df['Symbol'].isin(symbols)]
            print(stocks.to_string(index=False, header=False))
            dflist.append(stocks)
        else:
            print(f'No stock found for {date.date()}' )
    except urllib.error.HTTPError:
         continue 

df = pd.concat(dflist)