使用 .between() 检查从字典中拉出的长/纬度位置时出错

Posted

技术标签:

【中文标题】使用 .between() 检查从字典中拉出的长/纬度位置时出错【英文标题】:Error when using .between() for checking a long/lat location pulling it from a dictionary 【发布时间】:2019-09-15 00:13:05 【问题描述】:

我正在扫描按特定 ID 分组的数据框,并尝试根据我在字典中的某些长/纬度位置返回位置表面类型。数据集的问题在于它是以每秒 100 帧的速度创建的,所以我试图找到中间值,因为该点之前和之后的值不正确。

我正在使用 pandas jupyter notebook 并且有

这是我想从字典中提取位置的函数。该位置只是一个虚构的例子

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】:

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

【讨论】:

非常感谢您,这似乎正在解决浮动问题,并且在我运行它时没有错误但是当我运行它时仍然没有返回,所以我认为它可能不是从字典中提取的但我不确定。制作函数的方式我不需要上面将显示的“返回音高界限”。如果您在上面看到任何问题,将不胜感激

以上是关于使用 .between() 检查从字典中拉出的长/纬度位置时出错的主要内容,如果未能解决你的问题,请参考以下文章

迭代字典并自动将对存储为变量

如何从字典中检查特定字符串的键[重复]

Arrayformula 检查列是不是包含文本并拉出旁边的数字。谷歌表格

从具有字典列的csv构造pandas数据框

无法从队列中拉出消息

显示外汇字典键/值对