亲爱的stackoverflow社区,
这是我第一次在这里提问。希望你能放我一马。下面是一个问题的描述:
- 我使用ogr2org将KML文件转换为CSV
ogr2ogr -f CSV output.csv 'some KML file'.kml
- 然后在pandas
data = pd.read_csv('output.csv')
中读取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
- 描述下的代表性字符串变量如下:
<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