【问题标题】:Python: Pandas Dataframe MultiIndex select data based on Index values gives empty resultPython:Pandas Dataframe MultiIndex 根据索引值选择数据给出空结果
【发布时间】:2021-05-16 02:36:07
【问题描述】:

我有一个 pandas 数据框,它有多个索引(纬度、经度和时间),数据是风速。我想根据一个纬度、经度位置进行选择。当我尝试这个时,它返回一个空结果。我在这里做错了什么?

这是我原始数据框的一部分:

df=df.query('latitude =='+str(24.549999)+ 'and longitude=='+str(-126.870003))
df

返回这个:

完全是空的,就像找不到我要找的东西一样。我在这里做错了什么?还有一种方法可以对索引值进行四舍五入,例如纬度和经度是小数点后两位 latitude=24.55 和 longitude=-126.87?

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    实际上您遇到了这个问题,因为列 'latitude','longitude''time' 是字符串类型,因此要解决它:

    df=df.reset_index()
    

    现在使用astype() 方法和to_datetime() 方法:

    df[['latitude', 'longitude']]=df[['latitude', 'longitude']].astype(float)
    df['time']=pd.to_datetime(df['time'])
    

    最后:

    df = df.set_index(['latitude', 'longitude','time'])
    

    现在如果你运行你的代码:

    df=df.query('latitude =='+str(24.549999)+ 'and longitude=='+str(-126.870003)
    

    你会得到你想要的输出

    【讨论】:

    • 嗯,我试过上面的方法,它仍然是空的。我认为它会返回给定位置的每次风速。
    • 试试df.query('latitude == 24.549999 and longitude== -126.870003')
    • df=df.query('latitude == 24.549999 and longitude== -126.870003') 仍然返回空
    • 因为它在我身边工作......所以让我们试试loc accessor.....try:df.loc[(24.549999,-126.870003)]
    • 这给了我一个“KeyError: 24.549999”
    【解决方案2】:

    好吧,在我打印了数据框的实际值而不是依赖于显示的内容之后,我发现精度要高得多:

    df.index.values
    

    所以我决定更改上面的 Anurag Dabas 答案以执行以下操作:

    df[['latitude']]=df[['latitude']].astype(float).applymap('{:,.2f}'.format)
    df[['longitude']]=df[['longitude']].astype(float).applymap('{:,.2f}'.format)
    df['time']=pd.to_datetime(df['time'])
    df = df.set_index(['latitude', 'longitude','time'])
    df
    

    df.index.values
    

    然后下面的作品!谢谢!

    df.loc[('24.55','-126.87')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 2019-05-06
      • 2018-05-31
      • 2020-06-23
      • 2019-12-02
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多