BeautifulSoup 表到数据框

2024-01-28

似乎无法将表中的值正确复制到数据框中。如果运行 raw_data,它会输出所有值的列表。知道如何使其结构化吗?

pop_source = requests.get("http://zipatlas.com/us/tx/austin/zip-code-comparison/population-density.htm").text

soup = BeautifulSoup(pop_source, 'html5lib')    
source = soup.find_all('td',class_ = 'report_data')


pop = pd.DataFrame(columns=['Zip Code','Population'])


row_data = [data.text for data in source]

temp_df = pd.DataFrame([row_data], columns=['#','Zip Code','Location','City', 'Population','People/Sq.Mile','National Rank'])   

temp_df = temp_df[['Zip Code','Population']]   
pop = pop.append(temp_df).reset_index(drop=True)    
pop

代码中的一些事情:

  1. 上面的代码实际上不会循环任何内容。事实上,如果您尝试运行它,您应该会遇到大量错误。无法看到仅使用您提供的值循环相同值的输出。

  2. 缩进已关闭,

  3. 你引用一个变量source尚未定义。您引用一个变量cols这也没有定义。

  4. 您初始化一个数据框pop有 2 列,并尝试附加一个有 7 列的数据框。

各种各样的问题都在这里发生。

您是否考虑过直接使用 Pandas 来形成数据框?您仍然可以使用 BeautifulSoup,但 pandas 可以为您完成这项工作,而且您似乎需要更多地练习使用 BeautifulSoup 迭代元素(您实际上从未使用过.find or .find_all找到与您想要的表关联的标签。)

如果您需要 BeautifulSoup 方法来做到这一点,请告诉我,我也可以提供这种方法,但说实话,这比仅仅使用.read_html()这里有熊猫。

import pandas as pd

url = 'http://zipatlas.com/us/tx/austin/zip-code-comparison/population-density.htm'

tables = pd.read_html(url)

df = tables[11][1:]
df.columns = tables[11].iloc[0]

Output:

print (df)
0     # Zip Code      ...      People / Sq. Mile National Rank
1    1.    78705      ...               11008.66          #519
2    2.    78751      ...                5822.28        #1,374
3    3.    78752      ...                5435.92        #1,528
4    4.    78741      ...                5346.47        #1,562
5    5.    78723      ...                5175.95        #1,640
6    6.    78704      ...                5001.96        #1,713
7    7.    78758      ...                4954.80        #1,730
8    8.    78702      ...                4501.98        #2,015
9    9.    78757      ...                4380.92        #2,087
10  10.    78756      ...                4298.80        #2,139
11  11.    78745      ...                4063.22        #2,295
12  12.    78753      ...                3973.96        #2,350
13  13.    78703      ...                3491.54        #2,753
14  14.    78731      ...                3031.63        #3,167
15  15.    78759      ...                2998.68        #3,199
16  16.    78727      ...                2856.67        #3,371
17  17.    78749      ...                2795.02        #3,438
18  18.    78728      ...                2640.31        #3,614
19  19.    78721      ...                2568.43        #3,690
20  20.    78722      ...                2567.53        #3,692
21  21.    78729      ...                2366.94        #3,944
22  22.    78701      ...                2326.65        #3,995
23  23.    78748      ...                1961.73        #4,504
24  24.    78750      ...                1731.01        #4,870
25  25.    78744      ...                1464.78        #5,311
26  26.    78746      ...                1152.39        #5,971
27  27.    78717      ...                1081.05        #6,119
28  28.    78739      ...                 768.80        #7,006
29  29.    78734      ...                 698.96        #7,267
30  30.    78724      ...                 555.85        #7,870
31  31.    78726      ...                 543.24        #7,940
32  32.    78733      ...                 510.92        #8,116
33  33.    78754      ...                 484.73        #8,255
34  34.    78735      ...                 474.14        #8,318
35  35.    78732      ...                 416.13        #8,702
36  36.    78742      ...                 321.40        #9,467
37  37.    78730      ...                 257.86       #10,189
38  38.    78738      ...                 213.29       #10,829
39  39.    78747      ...                 194.02       #11,173
40  40.    78736      ...                 187.88       #11,301
41  41.    78737      ...                 143.90       #12,372
42  42.    78725      ...                 116.87       #13,282
43  43.    78719      ...                  93.88       #14,377

[43 rows x 7 columns]

与美丽汤

这不是执行此操作的理想方法。虽然这个网站非常简单table, tr, td标签。您可能想要的是首先获取所有行,然后迭代每一行以获取<td>标签。但你却抓住了所有<td>一口气标记。这仍然可以,但我们需要将其分成每一行。

我所做的就是将其分成 7 组,因为这就是有多少列。请注意,我做了一个巨大的假设,所有数据都在那里。如果不是,则表格将关闭或行、列将被移动。

import requests
import pandas as pd
import bs4


# Create a function called "chunks" with two arguments, l and n:
def chunks(l, n):
    # For item i in a range that is a length of l,
    for i in range(0, len(l), n):
        # Create an index range for l of n items:
        yield l[i:i+n]



pop_source = requests.get("http://zipatlas.com/us/tx/austin/zip-code-comparison/population-density.htm").text

soup = bs4.BeautifulSoup(pop_source, 'html5lib')


source = soup.find_all('td',class_ = 'report_data')

pop = pd.DataFrame(columns=['#','Zip Code','Location','City', 'Population','People/Sq.Mile','National Rank'])

row_data = [data.text for data in source]

rows_data = list(chunks(row_data, 7))

for ele in rows_data:
    temp_df = pd.DataFrame([ele], columns=['#','Zip Code','Location','City', 'Population','People/Sq.Mile','National Rank'])
    pop = pop.append(temp_df).reset_index(drop=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BeautifulSoup 表到数据框 的相关文章

  • 将 pandas 数据框中的列减去其第一个值

    我需要将 pandas 数据帧的一列中的所有元素减去其第一个值 在这段代码中 pandas 抱怨 self inferred type 我猜这是循环引用 df Time df Time df Time 0 在这段代码中 pandas 抱怨为
  • 带圆角的 Seaborn 条形图

    我正在尝试绘制一些条形图 但想控制角的圆度 我尝试按照堆栈问题中提供的答案进行操作Matplotlib 中带圆角的条形图 https stackoverflow com questions 58425392 bar chart with r
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 从时间序列生成日期特征

    我有一个数据框 其中包含如下列 Date temp data holiday day 01 01 2000 10000 0 1 02 01 2000 0 1 2 03 01 2000 2000 0 3 30 01 2000 200 0 30
  • 根据列值拆分数据框

    我有一个像这样的数据框 EndDate 2007 10 31 0 2007 11 30 0 03384464 2007 12 31 0 0336299 2008 01 31 0 009448923 2008 02 29 0 2008 03
  • 对 Python DataFrame 进行子集化

    我正在从 R 过渡到 Python 我刚刚开始使用 Pandas 我有一个可以很好地子集化的 R 代码 k1 lt subset data Product p id Month lt mn Year yr select c Time Pro
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • 具有条件的重复行 pandas dataframe python

    我的数据框有问题 我的 df 是 product power brand product 1 3 x 1500W brand A product 2 2x1000W 1x100W product 3 1x1500W 1x500W brand
  • 根据字符位置拆分列中的字符串

    我有一个像这样的数据框 Basic Stats Min Max Mean Stdev 1 LT50300282010256PAC01 0 336438 0 743478 0 592622 0 052544 2 LT5030028200926
  • 从多个 url 导入表以创建单个数据框和 csv 文件

    从多个 URL 导入表并希望创建单个数据框然后存储为 csv 文件 我正在努力从表格中删除重复的描述 并且无法操作数据框dfmaster创建后 Maybe pd read html是作为列表而不是数据框导入吗 我尝试迭代传入的表并使用 fo
  • Pandas - 通过在另一个数据框中查找来替换值

    我需要用 Python3 解决 pandas 数据框中的问题 我有两个数据框 第一个是 ID Name Linked Model 1 Linked Model 2 Linked Model 3 0 100 A 1111 0 1112 0 N
  • 如何向 pandas 数据框列添加小时

    我有一个 pandas 数据帧时间列 如下所示 segments data time Out 1585 0 04 50 00 1 04 50 00 2 05 00 00 3 05 12 00 4 06 04 00 5 06 44 00 6
  • 对 pandas 系列进行排序

    我试图弄清楚如何以智能方式对 groupby 聚合生成的系列进行排序 我生成 DataFrame 的聚合 如下所示 means df testColumn groupby df testCategory mean 这产生了一个系列 我现在尝
  • 为什么我会收到 ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

    以下代码给出了值错误 major males for row in recent grads if recent grads Men gt recent grads Women major males append recent grads
  • 将列表值转换为 pandas 中的行

    我有数据帧 其中一列具有相同长度的 numpy ndarray 值 df list 0 Out 92 array 0 0 0 0 29273096 0 30691767 0 27531403 我想将这些列表值转换为数据框并从 df iloc
  • 使用 pandas 中的 chunksize 参数提取每个值的基本计数

    我有一个包含以下类别的 CSV 文件 item1 item2 item3 item4其中值恰好是以下之一 0 1 2 3 4 我想计算每个项目的每个值有多少个 我的代码如下 df是相应的DataFrame outputDf pandas D
  • 使用 array.reshape(-1, 1) 重塑数组

    我有一个名为的数据框data我试图从中找出任何异常价格 数据帧头如下所示 Date Last Price 0 29 12 2017 487 74 1 28 12 2017 422 85 2 27 12 2017 420 64 3 22 12
  • Pandas,条形图注释

    如何正确给 Pandas 条形图添加注释 我正在跟进使用 Pandas 和 MPL 进行条形图注释 http robertmitchellv com blog bar chart annotations with pandas and mp
  • 在 groupby 聚合函数中传递参数

    我有我引用的数据框df在代码中 我在每组的多个列上应用聚合函数 我还应用了用户定义的 lambda 函数f4 f5 f6 f7 有些功能非常相似 例如f4 f6 and f7其中只有参数值不同 我可以从以下位置传递这些参数吗字典 d 这样我
  • 如何在 Pandas 数据框中用 NaN 替换一系列值?

    我有一个巨大的数据框 我应该如何用 NaN 替换一系列值 200 100 数据框 您可以使用pd DataFrame mask https pandas pydata org pandas docs stable generated pan

随机推荐

  • TSQL:字符串错误的日期时间

    有一些与此相关的帖子 但我对 TSQL 很陌生 我无法理解它们 所以请原谅 我的程序有 BEGIN TRY INSERT INTO dbo myprocedure Mydate VALUES CONVERT DATETIME mydate
  • C# using 语句捕获错误

    我只是查看 using 语句 我一直知道它的作用 但直到现在还没有尝试使用它 我想出了以下代码 using SqlCommand cmd new SqlCommand reportDataSource new SqlConnection S
  • 调用远程ESB客户端错误

    我正在尝试从远程客户端发送和 esb 消息 但我不断收到此错误 org jboss soa esb listeners message MessageDeliverException org apache ws scout transpor
  • 如何使 Google Chrome 扩展示例正常工作?

    最近我决定编写一个非常简单的 Google Chrome 扩展 它要做的就是当用户按下扩展程序的按钮时 使用 JavaScript 从网页中隐藏一些 DOM 元素 由于我对 Chrome 扩展一无所知 所以我开始阅读教程 然后我发现了这个
  • 了解青春痘

    我不明白这个 DI容器 是如何使用的 官方网站上显示的示例没有告诉我任何信息 http pimple sensiolabs org http pimple sensiolabs org 基本上我有一个简单的站点 它由一组类组成 DB 类 C
  • Emacs:Tramp 不起作用

    我尝试通过 Emacs 通过 Tramp 打开远程文件 require tramp setq tramp default method ssh 我收到一条来自 Emacs 的消息 TRAMP 等待远程 shell 的提示 Emacs 挂起并
  • 如何从AVAudioEngine的installTap高频获取缓冲区

    我希望像 iOS 语音备忘录应用程序一样在屏幕上渲染音频波形 因此我使用 AVAudioEngine 并在输入节点上安装 Tap 但它以 0 1 秒的频率提供最快的回调 我需要以更快的频率获取缓冲区数据 以便可以在屏幕上绘制越来越多的波形
  • T4 FieldName 采用驼峰命名法,不带下划线?

    我正在使用 T4 生成一些类定义 并发现我的字段名称前面有一个下划线 我已经设定 code CamelCaseFields true 只是为了安全起见 尽管我知道这是默认设置 但最终仍然是 myField 而不是 myField 如何生成不
  • 将日志文件转换为 json?

    我有以下格式的日志文件 我需要使用 python 将日志文件转换为 json 文件 怎样才能制作出来呢 2015 07 13 00 03 05 976 hostname 1499918592344 UZA Anonymous Anonymo
  • 不带无参数 DbContext 和 DbContextFactory 构造函数的 Add-Migration

    我的应用程序没有无参数构造函数DbContext实现 我不喜欢提供无参数构造函数IDbContextFactory lt gt 执行 原因是我想控制 DbContext 指向的位置 这就是为什么我的所有构造函数都会请求 Connection
  • Unicode 转换为 ASCII 如何知道将 Ł 映射到 L

    我惊讶地发现没有 Unicode 规范化 字符将其映射为类似的东西L combining stroke 这是我理解原因的最佳解释 映射到L而不是 从支持 Unicode 的编码转换为 ASCII 或不具有 Unicode 功能的代码页时 特
  • C# 中的 ONVIF api 捕获图像

    我有一个 ONVIF 网络摄像机 我想从相机捕获图像 以便可以处理该图像并将其保存到文件系统 我发现有一个onvif api提供了一个方法GetSnapshotUri这应该为我提供图像快照 http www onvif org onvif
  • npm 错误! enoent ENOENT: 没有这样的文件或目录,打开 'C:\Users\...\package.json'

    我正在做一个关于 VueJS 的教程 我对此完全陌生 所以不太确定我在做什么 我按照所有说明进行操作 安装了所有软件包 这是我在 VSCode 终端中进行的检查 PS C Users Documents Vue Getting Starte
  • 使用 Thoughtbot Bourbon/Neat 重新排序列

    我正在寻找有关如何使用 Thoughtbot 的 Neat 网格框架在不同断点处重新排序 移动列位置的最佳解决方案 I would like to shift elements in my header from this in deskt
  • 将文件直接导入到 SVN 存储库,无需先签出

    我正在使用 SVN 并且在远程计算机上有一个存储库 有时 在本地计算机上工作时 我意识到需要向存储库添加一些新文件 我知道的通常程序是 在我本地计算机上的当前文件夹中签出整个 SVN 存储库 进入那里 将有趣的文件复制到此处 commit
  • 放弃 const of *this 是否会导致未定义的行为?

    以下代码可编译 看起来运行良好 但这会导致任何未定义的行为吗 我想抛弃 const this 这是为了允许const my iterator改变它指向的数据 Test class A public A const int x x x voi
  • 如何在C++中计算欧拉常数或欧拉幂?

    我正在尝试找到更 自然 的方式来使用该号码e在 C C 中 我专注于计算函数e n 我认为 cmath 默认情况下不提供对两者 函数和常量 的支持 但是 可以启用它来包含编译器定义的常量 在这种情况下 M E 这可以通过包含语句来完成 de
  • 基于开始和结束时间的一天中最活跃的时间

    我正在记录社区中玩家的统计数据 对于他们的在线状态和游戏内状态 我会在它们 开始 和 结束 时进行注册 为了显示一天中最活跃的一天和一小时 我想使用一个 SQL 语句来根据 开始 和 结束 日期时间值来测量最活跃的时刻 看着SQL 从数据库
  • 圆形页面指示器 - 如何更改填充颜色变化

    我在用着查看寻呼指示器 具体来说圆形页面指示器在我的 Android 应用程序中 要求是填色会直接移动到指示器的下一个圆圈 不会出现图中的情况 分页时圆圈移动缓慢 停留在中间 我怎样才能做到这一点 你可以在你的 xml 上试试这个
  • BeautifulSoup 表到数据框

    似乎无法将表中的值正确复制到数据框中 如果运行 raw data 它会输出所有值的列表 知道如何使其结构化吗 pop source requests get http zipatlas com us tx austin zip code c