【问题标题】:Pandas - how to read a table from clipboardPandas - 如何从剪贴板读取表格
【发布时间】:2019-09-25 05:47:04
【问题描述】:

我正在尝试从网页中抓取表格。

                    <tr valign="top">
                            <td class="doprawej bezlewej">
                                AT00BUWOG001
                            </td>

                                <td class="doprawej">
                                    P
                                </td>
                                <td class="doprawej">

                                </td>

                            <td class="doprawej">
                                142
                            </td>
                            <td class="doprawej">
                                <b>BUWOG</b>
                            </td>
                            <td class="doprawej">
                                124&nbsp;184&nbsp;779
                            </td>
                            <td class="doprawej">
                                16&nbsp;019,84
                            </td>
                            <td class="doprawej">
                                12&nbsp;476,29
                            </td>
                            <td class="doprawej">
                                2018-07-31
                            </td>
                            <td class="doprawej">
                                H
                            </td>
                            <td class="doprawej">
                                1,28
                            </td>
                            <td class="doprawej">
                                14,00
                            </td>
                            <td class="doprawej bezprawej">
                                2,30
                            </td>
                        </tr>


                        <tr valign="top">
                            <td class="doprawej bezlewej">
                                PLBRSTM00015
                            </td>

                                <td class="doprawej">
                                    P
                                </td>
                                <td class="doprawej">
                                    LA
                                </td>

                            <td class="doprawej">
                                180
                            </td>
                            <td class="doprawej">
                                <b>CALATRAVA</b>
                            </td>
                            <td class="doprawej">
                                15&nbsp;000&nbsp;000
                            </td>
                            <td class="doprawej">
                                3,45
                            </td>
                            <td class="doprawej">
                                7,93
                            </td>
                            <td class="doprawej">
                                2017-03-31
                            </td>
                            <td class="doprawej">
                                H
                            </td>
                            <td class="doprawej">
                                0,44
                            </td>
                            <td class="doprawej">
                                0,00
                            </td>
                            <td class="doprawej bezprawej">
                                0,00
                            </td>
                        </tr>

我试过熊猫read_clipboard() 但我得到的结果是列中的数据最终出现在不同的列中,因为表中有一些空列。

           ISIN Market Segment    ...             PBV    PE  Div Yield
0  PLNFI0600010      P      LA    ...      2018-12-31     H       0,14
1  PLNFI0800016      P     141    ...               H  0,55     160,00
2  PL11BTS00015      P     650    ...               J  9,44      22,60
3  PL4FNMD00013      P     641    ...               H  1,25       6,80
4  PLABCDT00014      R     612    ...               H  0,94       0,00
5  PLABMSD00015      P     411    ...            0,00  0,00       0,00
6  PLAB00000019      P     612    ...               H  0,39       5,10
7  PLACSA000014      P     541    ...               J  4,20      13,00
8  PLACTIN00018      P     612    ...               H  0,51       0,00
9  PLADVIV00015      P     720    ...               H  2,07       0,00

我可以在read_clipboard() 中设置一些属性,以使一行数据的长度始终与 HTML 中的长度相同吗?并且数据最终在右列中?

【问题讨论】:

  • 你试试 pandas 中的 read_html() 函数?如果我明白你可以工作。[pandas.pydata.org/pandas-docs/version/0.23.4/generated/…
  • @tiagohbalves 我没有尝试 read_html,我不能使用链接,因为它是一个只有在身份验证后才能看到的页面。 HTML 页面本身很大,当我尝试将 html 直接复制粘贴到 python 中的变量时,它使我的计算机崩溃了。
  • 我找到了这个解决方案,在您阅读下载的 html 文件时。 [stackoverflow.com/questions/25056120/…

标签: python pandas beautifulsoup


【解决方案1】:

我尝试了read_html 方法并手动添加了&lt;table&gt;&lt;/table&gt; 包装器。

但是你可以使用这个:

from BeautifulSoup import BeautifulSoup
html = "..."
soup = BeautifulSoup(html)
print soup.prettify()

这是我尝试过的:

html="""<table><tr valign="top">
                            <td class="doprawej bezlewej">
                                AT00BUWOG001
                            </td>

                                <td class="doprawej">
                                    P
                                </td>
                                <td class="doprawej">

                                </td>

                            <td class="doprawej">
                                142
                            </td>
                            <td class="doprawej">
                                <b>BUWOG</b>
                            </td>
                            <td class="doprawej">
                                124&nbsp;184&nbsp;779
                            </td>
                            <td class="doprawej">
                                16&nbsp;019,84
                            </td>
                            <td class="doprawej">
                                12&nbsp;476,29
                            </td>
                            <td class="doprawej">
                                2018-07-31
                            </td>
                            <td class="doprawej">
                                H
                            </td>
                            <td class="doprawej">
                                1,28
                            </td>
                            <td class="doprawej">
                                14,00
                            </td>
                            <td class="doprawej bezprawej">
                                2,30
                            </td>
                        </tr>


                        <tr valign="top">
                            <td class="doprawej bezlewej">
                                PLBRSTM00015
                            </td>

                                <td class="doprawej">
                                    P
                                </td>
                                <td class="doprawej">
                                    LA
                                </td>

                            <td class="doprawej">
                                180
                            </td>
                            <td class="doprawej">
                                <b>CALATRAVA</b>
                            </td>
                            <td class="doprawej">
                                15&nbsp;000&nbsp;000
                            </td>
                            <td class="doprawej">
                                3,45
                            </td>
                            <td class="doprawej">
                                7,93
                            </td>
                            <td class="doprawej">
                                2017-03-31
                            </td>
                            <td class="doprawej">
                                H
                            </td>
                            <td class="doprawej">
                                0,44
                            </td>
                            <td class="doprawej">
                                0,00
                            </td>
                            <td class="doprawej bezprawej">
                                0,00
                            </td>
                        </tr></table>"""

df= pd.read_html(html, header=None)[0]
print(df)

输出是:

             0  1    2    3          4            5          6          7   \
0  AT00BUWOG001  P  NaN  142      BUWOG  124 184 779  16 019,84  12 476,29   
1  PLBRSTM00015  P   LA  180  CALATRAVA   15 000 000        345        793   

           8  9    10    11   12  
0  2018-07-31  H  128  1400  230  
1  2017-03-31  H   44     0    0 

【讨论】:

  • 谢谢,它有效,我只是在访问 html 时遇到问题
  • 很好的检查@Mark ✓
【解决方案2】:

在 pandas source 中,read_clipboard() 方法只是 read_csv() 的一个方便包装器,这意味着您可以在方法调用中使用来自 read_csv() 的所有参数

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 2015-08-13
    • 2013-11-16
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多