Разбор файла KML с использованием pyKML - PullRequest
0 голосов
/ 17 марта 2020

Я учусь анализировать файлы KML в Python с помощью модуля pyKML. Указанный файл c, который я использую, можно найти здесь , и я также добавил его внизу этого поста. Я сохранил файл на своем компьютере и назвал его test.kml.

. После некоторых исследований мне удалось извлечь определенную c часть файла 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 l oop, но безуспешно.

for pm in folder.Placemark:
    plnm1 = pm.name
    val1 = pm.ExtendedData.holeNumber.value
    plnm.append(plnm1.text)
    val.append(val1.text)

Я не уверен, как получить доступ к значению из этого указанного c узла. Полученный в результате 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>

1 Ответ

1 голос
/ 17 марта 2020

Вот быстрый способ анализа 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
...