Pandas / BeautifulSoup - 使用.txt从URL获取数据

时间:2017-11-25 01:50:51

标签: python pandas beautifulsoup

我正在尝试从此网站获取日期,网址中包含.txt。我是一个蟒蛇新手,刚刚开始上周。这是链接:

http://regsho.finra.org/FNSQshvol20171121.txt

我尝试使用pandas,requests.get和BeautifulSoup来获取我认为我做得对的数据。接下来的问题是......如何索引和使用我刚刚获得的数据。这是我的代码

page = requests.get('http://regsho.finra.org/FNSQshvol20171121.txt')
soup = BeautifulSoup(page.text, 'html.parser')
print(soup.prettify())

OR

import pandas as pd
list = pd.read_table('http://regsho.finra.org/FNSQshvol20171121.txt')
list.head()
list.columns

如何索引从网站获得的数据或只选择某些列?

list['Date', 'Symbol']
list[5:12]

等等。

请帮忙!我觉得应该有一个更简单的方法,我不必走艰难的路线。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我不相信你正确地读了你的数据帧。如果您使用的是read_table,请使用sep='|'将数据正确分段到不同的列中。

df = pd.read_table('http://regsho.finra.org/FNSQshvol20171121.txt', sep='|')

df.head()

       Date Symbol  ShortVolume  ShortExemptVolume  TotalVolume Market
0  20171121      A     625382.0             3586.0    1467570.0      Q
1  20171121     AA     873300.0             3417.0    2158580.0      Q
2  20171121   AAAP       4185.0              135.0     412030.0      Q
3  20171121   AABA     452857.0              300.0    4045918.0      Q
4  20171121    AAC      21235.0             1501.0      45747.0      Q

现在,df[['X', 'Y', ...]]为您提供了所选列的数据框切片:

df[['Date', 'Symbol']].head()

       Date Symbol
0  20171121      A
1  20171121     AA
2  20171121   AAAP
3  20171121   AABA
4  20171121    AAC

要选择行列子切片,只需使用loc

df.loc[5:12, ['Date', 'Symbol']]

        Date Symbol
5   20171121   AADR
6   20171121    AAL
7   20171121   AAMC
8   20171121   AAME
9   20171121    AAN
10  20171121   AAOI
11  20171121   AAON
12  20171121    AAP

如果要将其分配给df,请执行此操作。这些操作不在原地。

df = df.loc[5:12, ['Date', 'Symbol']]

请注意,您丢失了原始数据帧。如果要将切片分配给不同的变量,也可以这样做...但请确保复制以防止链式分配。

df2 = df.loc[5:12, ['Date', 'Symbol']].copy()

进一步阅读 -