【问题标题】:Why can't I search for a row in a pandas df using a date as part of a tuple index?为什么我不能使用日期作为元组索引的一部分在 pandas df 中搜索一行?
【发布时间】:2018-03-07 16:55:53
【问题描述】:

我正在尝试搜索我制作的以元组作为索引的 pandas df。元组的第一部分是日期,第二部分是外汇对。我已经尝试了一些东西,但我似乎无法使用日期格式的字符串作为 .loc 或 .ix 元组的一部分进行搜索

我的 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', 'GBPUSD') 的行?

【问题讨论】:

    标签: python pandas datetime tuples


    【解决方案1】:

    您可以尝试使用括号将元组放在列表中吗?

    像这样:

    print(forex_open_close.ix[[('11-01-2018', 'GBPUSD')]])
    

    【讨论】:

      【解决方案2】:

      我建议使用 Pandas 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']
      

      【讨论】:

      • 我尝试使用 multiIndex 和 tbh 我更喜欢它,但是当我尝试使用 data.loc['2018-01-11', 'AEDCAD'] 我得到 axis=self.obj._get_axis_name (轴)))KeyError:'标签[2018-01-11]不在[索引]中'?
      • 你用的是什么版本的熊猫?我用 Pandas 0.22.0 测试了这个
      • 好吧实际上是 0.21 - 现在升级
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      相关资源
      最近更新 更多