【问题标题】:How can I convert an unstructured string to a dataframe?如何将非结构化字符串转换为数据框?
【发布时间】:2023-03-03 02:25:01
【问题描述】:

我有一个长字符串文本,我想将其转换为数据框进行分析。请参阅下面的数据示例。我希望这些列是“设施”、“街道”、“城市”、“电话”和“商店营业时间”。

string = AlaskaUSCG Base Ketchikan 1300 Stedman Street  Ketchikan, AK  (907) 228-0250 Mon-Fri 7:30am-5pm | Sat 10am-4pm | Closed Sunday USCG Base Kodiak Albatros Avenue, Building 26 (2nd Floor)  Kodiak, AK  (907) 487-5773 USCG Base Kodiak Albatros Avenue, Building 26 (1st Floor)  Kodiak, AK  (907) 487-5773 Mon-Fri: 7am-9pm | Sat: 9am-9pm |

我使用 StringIO 将其转换为数据帧,但它会将其转换为具有 0 行和 1000 列的数据帧。相反,我想要上面提到的列和每个商店的行。

我希望它看起来像这样,数据填充为行:

Facility                    Street               City           Phone   
Alaska USCG Base Ketchikan  1300 Stedman Street  Ketchikan, AK  (907) 228 0250

【问题讨论】:

  • 好了,网站比原始字符串更能满足您的需求。阅读BeautifulSoup 以及如何解析 XML 文件(在本例中为 HTML)。您想提取 p 标签之间的值(即

    value

    )并清理这些值。首先使用一些库来获取 .HTML 文件(如 urllibrequests 库)并尝试阅读一些基本示例,了解如何使用 bs4 解析来自这些库的响应。
  • @rafaelc 感谢您的帮助。实际上,我最初尝试使用 BeautifulSoup 来抓取信息,但我在让它正常工作时遇到问题,所以我转而尝试一些字符串操作。

标签: python string pandas dataframe data-manipulation


【解决方案1】:

您可以使用简单的网络抓取技术,例如 bs4requests

import bs4 

r = requests.get(URL)
b = bs4.BeautifulSoup(r.text)

addresses = []

for val in b.find_all(name='p'):
  s = list(val.stripped_strings)
  if s and not s[0].startswith('HOURS'): addresses.append(' '.join(s[:-1]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2015-02-19
    • 2017-11-26
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多