Как устранить ошибку "GeoDataFrame не имеет атрибута ..." - PullRequest
0 голосов
/ 04 июля 2019

Неоднократно при кодировании (начинающий кодер) я получаю то же сообщение об ошибке при работе с GeoDataFrames в геопандах: AttributeError: у объекта 'GeoDataFrame' нет атрибута XYZ.

Одна и та же ошибка возникает в нескольких точках кода (кажется, почти каждая операция, которую я пытаюсь реализовать).


    conflict_events = []
    for index, row in polys.iterrows():
        polygon = polys.geometry[0]
        subset = conflict[conflict.within(polygon)]
        # print(subset)
        conflict_events.append(subset)
        print(polys.conflict_events)

Ошибка = AttributeError: у объекта 'GeoDataFrame' нет атрибута 'threat_events'

polys - это шейп-файл. конфликт является точечным набором данных.


    for index, row in val.iterrows():
        # print(type(row['val_mar19']))
        # print(type(polys_val.loc[index].count))
        val_calc = row['val_mar19'] / float(polys_val.loc[index]['count'])
        if not math.isnan(val_calc):
            val_calc = int(val_calc)
        polys.REFPOP.iloc[[polys.NAME_1 == row.NAME_1]] = val_calc
    polys.to_file("val_pop.shp")
    scaler = preprocessing.StandardScaler()
    scaled_actual = scaler.fit_transform(output.row['simEnd'])
    scale_predicted = scaler.fit_transform(val.row['val_mar19'])

Ошибка = AttributeError: у объекта 'GeoDataFrame' нет атрибута '' строка '

val - это шейп-файл.

В обоих случаях одна и та же ошибка. В первом случае я пытаюсь пройтись по многоугольникам, определить, сколько точек попадает в каждый из них (количество), и сохранить это значение в новой строке "threat_events". Во втором случае я пытаюсь использовать sklearn для нормализации значений в двух строках (simEnd и val_mar19) из двух шейп-файлов соответственно (output и val) в 0-1. Мне кажется, что я что-то неправильно обрабатываю, когда дело доходит до GeoDataFrames.

1 Ответ

0 голосов
/ 07 июля 2019

Я работаю не с самими GeoDataFrames, а с DataFrames.

В первом случае вы создали объект списка с именем threat_events.Внизу вы пытаетесь распечатать эту информацию, но вы закодировали ее, используя «poly.conflict_events».'poly' - это объект геоданных, и его атрибуты могут вызываться с помощью

poly.someattribute

. Поскольку для poly нет атрибута context_events, Python выдает ошибку.

Вы делаете аналогичную вещь ввторой пример в последней строке.val является объектом геоданных.'row' - это значения конкретной строки этого объекта, созданной iterrows.'val' не имеет атрибута, специально названного row.

Надеюсь, это поможет.

...