Ошибка при использовании .between () для проверки расположения long / lat, вытягивая его из словаря - PullRequest
0 голосов
/ 25 апреля 2019

Я сканирую фрейм данных, сгруппированный по определенному идентификатору, и пытаюсь вернуть тип поверхности местоположений в зависимости от определенных длинных / латовых местоположений, которые есть в словаре.Проблема с набором данных заключается в том, что он создается со скоростью 100 кадров в секунду, поэтому я пытаюсь найти медианное значение, поскольку значения до и после этой точки неверны.

Я использую ноутбук pandas jupyter и имею

Это функция, которую я хочу получить из словаря.Это просто выдуманный пример

pitch_boundaries = {
    'Astro': {'max_long': -6.123456, 'min_long': -6.123456, 
'max_lat': 53.123456, 'min_lat': 53.123456},
}


def get_loc_name(loc_df, pitch_boundaries):

for pitch_name, coord_limits in pitch_boundaries.items():
    between_long_limits = loc_df['longitude'].median().between(coord_limits['min_long'], coord_limits['max_long'])
    between_lat_limits = loc_df['latitude'].median().between(coord_limits['min_lat'], coord_limits['max_lat'])
    if between_long_limits.any() and between_lat_limits.any():
        return pitch_name
# If we get here then there is no pitch.

назовите его здесь

def makeAverageDataFrame(df):
    pitchBounds = get_loc_name(df, pitch_boundaries)
     i = len(df_average.index)
     df_average.loc[i] = [pitchBounds]

наконец, где возникнут ошибки

for region, df_region in df_Will.groupby('session_id'):
    makeAverageDataFrame(df_region)

Фактические результаты
# AttributeError: 'float' object has no attribute 'between'
или если я удалю .median(): None

Мне нужен новый фрейм данных с чем-то вроде

|surface|

|Astro|

|Grass|

|Astro|

1 Ответ

0 голосов
/ 25 апреля 2019

loc_df['longitude'] - это серия, а loc_df['longitude'].median() дает вам число с плавающей запятой, которое не имеет метода between. Попробуйте loc_df[['longitude']].

def get_loc_name(loc_df, pitch_boundaries):
    for pitch_name, coord_limits in pitch_boundaries.items():
        between_long_limits = loc_df[['longitude']].median().between(coord_limits['min_long'], coord_limits['max_long'])
        between_lat_limits = loc_df[['latitude']].median().between(coord_limits['min_lat'], coord_limits['max_lat'])
        if between_long_limits.any() and between_lat_limits.any():
            return pitch_name

И ваша проблема с возвратом None заключается в том, что ваш makeAverageDataFrame ничего не возвращает (None). Попробуйте:

def makeAverageDataFrame(df):
    pitchBounds = get_loc_name(df, pitch_boundaries)
    return pitchBounds
...