Pandas .loc说我很确定某个值不在索引中

时间:2019-03-25 16:49:03

标签: python pandas

我正在对保存在CSV文件中的某些索引进行一些数学运算,并且从.loc中得到一些行为,我只能形容为...奇怪。当我使用Pandas将CSV文件读取到数据框中时,会看到以下内容:

[1]: import pandas as pd

[2]: df = pd.read_csv(csv_path, parse_dates=True, index_col="Date")

[3]: df = df.apply(pd.to_numeric, errors='coerce') # shouldn't matter

[4]: df.head(5)

Date          idx1        idx2         idx3         idx4       idx5
2019-03-22    106.1069    106.6425     106.520      106.45     105.870 ...
2019-03-21    106.6994    107.1746     106.975      106.87     106.145 ...
2019-03-20    106.4900    107.0894     106.875      106.84     106.095 ...
2019-03-19    106.4661    106.9107     106.820      106.71     106.100 ...
2019-03-18    106.5319    107.0137     106.760      106.75     106.100 ...
[5 rows x 53 columns]

当我打印indexindex.values时,我还会看到以下内容:

[5]: print df.index

DatetimeIndex(['2019-03-22', '2019-03-21', '2019-03-20', '2019-03-19',
           '2019-03-18', '2019-03-15', '2019-03-14', '2019-03-13',
           '2019-03-12', '2019-03-11',
           ...
           '2013-02-07', '2013-02-06', '2013-02-05', '2013-02-04',
           '2013-02-01', '2013-01-31', '2013-01-30', '2013-01-29',
           '2013-01-28', '2013-01-25'],
          dtype='datetime64[ns]', name=u'Date', length=1539, freq=None)

[6]: print df.index.values

['2019-03-22T00:00:00.000000000' '2019-03-21T00:00:00.000000000'
 '2019-03-20T00:00:00.000000000' ... '2013-01-29T00:00:00.000000000'
 '2013-01-28T00:00:00.000000000' '2013-01-25T00:00:00.000000000']

现在这里很奇怪。如果我运行以下命令:

[7]: df.loc["2019-03-21"]

Date          idx1        idx2         idx3         idx4       idx5
2019-03-21    106.6994    107.1746     106.975      106.87     106.145
[1 rows x 53 columns]

我得到的是与该日期相对应的行。但是,当我使用以下命令运行相同的确切内容时:

[8]: print df.loc["2019-03-22"]
KeyError: 'the label [2019-03-22] is not in the [index]' 

我收到一个KeyError,说此标签不在索引中。我已经进入实际的CSV文件以确认该日期是否存在,并且我尝试了其他.loc个日期,并且除2019-03-22以外的所有日期均成功。

有人可以给我提示一下这里可能发生什么吗?我一生无法弄清楚发生了什么。

回答下面来自Edeki Okoh的问题:

print df.index.get_loc("2019-03-22")
[0]

print df.index.get_loc("2019-03-21")
[1]

df.iloc[0]
Out[17]: 
idx1                   106.107
idx2                   106.642
idx3                   106.52
idx4                   106.45
idx5                   105.87

Name: 2019-03-22 00:00:00, dtype: object

0 个答案:

没有答案