从 df 变量中提取 HTML 信息
Extract HTML information from df variable
亲爱的 Whosebug 社区,
这是我第一次在这里提问。希望你能放过我。
下面是一个问题的描述:
- 我使用 ogr2org 将 KML 文件转换为 CSV
ogr2ogr -f CSV output.csv 'some KML file'.kml
- 然后我读入了 pandas
中的 csv 文件
data = pd.read_csv('output.csv')
- 删除一些奇怪的列后,我最终得到以下内容:
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
- description变量下的代表字符串如下:
<div class=""googft-info-window"">
<b>ID:</b> 1<br>
<b>class:</b> 1<br>
<b>fold:</b> 5
</div>
我的问题是如何从 'description' 列中提取干净的信息并使用所有 <b>...<\b>
作为列名将其添加到同一行。
谢谢。
P.S。请告诉我以后如何改进我的问题。
您可以将 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
亲爱的 Whosebug 社区,
这是我第一次在这里提问。希望你能放过我。 下面是一个问题的描述:
- 我使用 ogr2org 将 KML 文件转换为 CSV
ogr2ogr -f CSV output.csv 'some KML file'.kml
- 然后我读入了 pandas
中的 csv 文件data = pd.read_csv('output.csv')
- 删除一些奇怪的列后,我最终得到以下内容:
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
- description变量下的代表字符串如下:
<div class=""googft-info-window"">
<b>ID:</b> 1<br>
<b>class:</b> 1<br>
<b>fold:</b> 5
</div>
我的问题是如何从 'description' 列中提取干净的信息并使用所有 <b>...<\b>
作为列名将其添加到同一行。
谢谢。 P.S。请告诉我以后如何改进我的问题。
您可以将 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