我正在对保存在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]
当我打印index
和index.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