从df变量中提取HTML信息



亲爱的stackoverflow社区,

这是我第一次在这里提问。希望你能放我一马。下面是一个问题的描述:

  1. 我使用ogr2org将KML文件转换为CSV
    ogr2ogr -f CSV output.csv 'some KML file'.kml
  2. 然后在pandas
    data = pd.read_csv('output.csv')
  3. 中读取csv文件
  1. 删除一些奇怪的列后,我最终有以下内容:
In[1]: data.head(8)
Out[1]: 
description   ID
0   <div class="googft-info-window">n<b>ID:</b> 1...   1
1   <div class="googft-info-window">n<b>ID:</b> 1...   10
2   <div class="googft-info-window">n<b>ID:</b> 1...   100
3   <div class="googft-info-window">n<b>ID:</b> 1...   1000
4   <div class="googft-info-window">n<b>ID:</b> 1...   10000
5   <div class="googft-info-window">n<b>ID:</b> 1...   10001
6   <div class="googft-info-window">n<b>ID:</b> 1...   10002
7   <div class="googft-info-window">n<b>ID:</b> 1...   10003
  1. 描述下的代表性字符串变量如下:
<div class=""googft-info-window"">
<b>ID:</b> 1<br>
<b>class:</b> 1<br>
<b>fold:</b> 5
</div>

我的问题是如何从"描述"列中提取干净的信息,并使用所有<b>...<b>作为列名将其添加到同一行。

谢谢。附言:请让我知道我将来如何改进我的问题。

您可以使用str.extractall与…

df[['ID1', 'class', 'fold']] = df['description'].str.extractall(r'</b>s?(d+)<').unstack()

或者像这样的str.findall

df[['ID1', 'class', 'fold']] = df['description'].str.findall(r'</b>s?(w+)<', expand=True)

这些基于像…

这样的字符串。
<div class=""googft-info-window""><b>ID:</b> 1<br><b>class:</b> 1<br><b>fold:</b> 5</div>

与您需要从字符串中提取的三个值匹配的正则表达式,并将其传递到=符号左侧的三个新列。

正则表达式:https://regex101.com/r/wVl2cI/1

这是假设您只有三个值要查找,并且HTML都是相同的。

输出(示例):

description             ID1    class    fold
0   <div class=""googft-..  1      1        1
1   <div class=""googft-..  1      1        1
2   <div class=""googft-..  5      5        5

最新更新