我正在学习如何使用pyKML模块解析Python中的KML文件。我正在使用的特定文件可以找到这里,我还在文章的底部添加了它。我已将文件保存在我的计算机上,并将其命名为test.kml。
经过一些研究,我成功地提取了test.kml文件的一个特定部分,并将结果保存到一个DataFrame中。这是我的密码:
from pykml import parser
import pandas as pd
filename = 'test.kml'
with open(filename) as fobj:
folder = parser.parse(fobj).getroot().Document
plnm = []
for pm in folder.Placemark:
plnm1 = pm.name
plnm.append(plnm1.text)
df = pd.DataFrame()
df['name'] = plnm
print(df)
name
0 Club house
1 By the lake我想在我的DataFrame中添加一个与"holeNumber"值相对应的新列。我尝试在我的for循环中添加以下行,但没有成功。
for pm in folder.Placemark:
plnm1 = pm.name
val1 = pm.ExtendedData.holeNumber.value
plnm.append(plnm1.text)
val.append(val1.text)我不知道如何访问该特定节点的值。我正在寻找的结果DataFrame如下:
| name | holeNumber |
|-------------|------------|
| Club house | 1 |
| By the lake | 5 |任何帮助都将不胜感激。
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>My Golf Course Example</name>
<Placemark>
<name>Club house</name>
<ExtendedData>
<Data name="holeNumber">
<value>1</value>
</Data>
<Data name="holeYardage">
<value>234</value>
</Data>
<Data name="holePar">
<value>4</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.956,33.5043</coordinates>
</Point>
</Placemark>
<Placemark>
<name>By the lake</name>
<ExtendedData>
<Data name="holeNumber">
<value>5</value>
</Data>
<Data name="holeYardage">
<value>523</value>
</Data>
<Data name="holePar">
<value>5</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.95,33.5024</coordinates>
</Point>
</Placemark>
</Document>
</kml>发布于 2020-03-16 22:36:46
下面是解析KML的快速方法。
plnm = []
holeNumber = []
for pm in folder.Placemark:
plnm1 = pm.name
val1 = pm.ExtendedData.Data[0].value
plnm.append(plnm1.text)
holeNumber.append(val1.text)
df = pd.DataFrame()
df['name'] = plnm
df['holeNumber'] = holeNumber
print(df)或
df = pd.DataFrame(columns=('name', 'holeNumber'))
for pm in folder.Placemark:
name = pm.name.text
value = pm.ExtendedData.Data[0].value.text
df = df.append({ 'name' : name, 'holeNumber' : value }, ignore_index=True)
print(df)输出:
name holeNumber
0 Club house 1
1 By the lake 5https://stackoverflow.com/questions/60713482
复制相似问题