Для l oop остановка без нашей ошибки, но не завершение - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь преобразовать файл xml в df, используя приведенный ниже код. Это в настоящее время проходит через создание 4 х 21 df. Однако в наборе данных содержится более 1000 парковок, поэтому я ожидаю 1000 x 21 df.

import xmltodict
import pandas as pd

sites = []

n = 0

with open('CarParkData_1.xml', 'r') as f:
    data = xmltodict.parse(f.read())['CarParkDataImport']

    for carpark in data:
        a = data['CarPark'][n]
        sites.append(a)
        n=n+1


df = pd.DataFrame(sites)
df.shape

Чтобы получить полный набор данных, мне нужно вложить в циклы, как здесь;

import xmltodict
import pandas as pd

sites = []

n = 0

with open('CarParkData_1.xml', 'r') as f:
    data = xmltodict.parse(f.read())['CarParkDataImport']

    for carpark in data:
        b = data['CarPark'][n]
        sites.append(b)
        n=n+1

        for carpark in data:
            b = data['CarPark'][n]
            sites.append(b)
            n=n+1

            for carpark in data:
                b = data['CarPark'][n]
                sites.append(b)
                n=n+1

                for carpark in data:
                    b = data['CarPark'][n]
                    sites.append(b)
                    n=n+1       

                    for carpark in data:
                        b = data['CarPark'][n]
                        sites.append(b)
                        n=n+1



df = pd.DataFrame(sites)
df.shape

Теперь вывод (1364, 21). Похоже, что некоторые данные содержат только 20 элементов, а не 21, и я подумал, может ли это быть причиной. Кто-нибудь знает, почему это не работает, или лучший способ исправить это.

Данные являются открытыми исходными данными Великобритании парковки.

1 Ответ

1 голос
/ 20 января 2020

l oop for carpark in data: перебирает ключи в словаре data. Вы должны перебирать все data['CarPark'].

. Нет необходимости в al oop, просто присвойте список:

sites = list(data['CarPark'])
...