代码之家  ›  专栏  ›  技术社区  ›  Davtho1983

为什么我不能使用日期作为元组索引的一部分在pandas df中搜索一行?

  •  0
  • Davtho1983  · 技术社区  · 7 年前

    我正在尝试搜索我制作的熊猫df,它以元组作为索引。元组的第一部分是日期,第二部分是外汇对。我尝试了一些方法,但似乎无法使用日期格式的字符串作为元组的一部分进行搜索。loc或。九

    我的df如下所示:

                            Open   Close
    (11-01-2018, AEDAUD)  0.3470  0.3448
    (11-01-2018, AEDCAD)  0.3415  0.3408
    (11-01-2018, AEDCHF)  0.2663  0.2656
    (11-01-2018, AEDDKK)  1.6955  1.6838
    (11-01-2018, AEDEUR)  0.2277  0.2261
    

    以下是完整的代码:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    forex_11 = pd.read_csv('FOREX_20180111.csv', sep=',', parse_dates=['Date'])
    forex_12 = pd.read_csv('FOREX_20180112.csv', sep=',', parse_dates=['Date'])
    time_format = '%d-%m-%Y'
    
    forex = forex_11.append(forex_12, ignore_index=False)
    forex['Date'] = forex['Date'].dt.strftime(time_format)
    GBP = forex[forex['Symbol'] == "GBPUSD"]
    forex.index = list(forex[['Date', 'Symbol']].itertuples(index=False, name=None))
    
    forex_open_close = pd.DataFrame(np.array(forex[['Open','Close']]), index=forex.index)
    forex_open_close.columns = ['Open', 'Close']
    print(forex_open_close.head())
    print(forex_open_close.ix[('11-01-2018', 'GBPUSD')])
    

    如何获取具有索引('11-01-2018','GBPMUSD')的行?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Connor John    7 年前

    你能试着用括号把元组放到列表中吗?

    像这样:

    print(forex_open_close.ix[[('11-01-2018', 'GBPUSD')]])
    
        2
  •  1
  •   Thor Tomasarson    7 年前

    我建议使用熊猫 multiIndex 。在您的情况下,您可以执行以下操作:

    tuples = list(data[['Date', 'Symbol']].itertuples(index=False, name=None))
    data.index = pd.MultiIndex.from_tuples(tuples, names=['Date', 'Symbol'])
    
    # And then to index
    data.loc['2018-01-11', 'AEDCAD']