【问题标题】:Parsing KML file using pyKML使用 pyKML 解析 KML 文件
【发布时间】:2020-03-16 21:31:58
【问题描述】:

我正在学习如何使用 pyKML 模块在 Python 中解析 KML 文件。我正在使用的特定文件可以在here 找到,我也在这篇文章的底部添加了它。我已将文件保存在我的计算机上并将其命名为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>

【问题讨论】:

    标签: python dataframe parsing kml pykml


    【解决方案1】:

    这是解析 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          5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多