我正在构建DataFrame
,如此:
dates = [datetime.datetime.today() + datetime.timedelta(days=x) for x in range(0, 2)]
d = DataFrame([[1,2],[3,4]], index = dates, columns = ['a', 'b'])
我想得到一个像这样的值:
d[d.index[0]]['a']
但是我收到以下错误:
KeyError: Timestamp('2018-04-26 16:08:16.120031')
怎么回事?
答案 0 :(得分:2)
如果您要尝试从#39; a'中获取第一个元素,则可以像这样访问它:
d.loc[d.index[0], 'a']
您现在的写作方式,d[d.index[0]]
正在尝试获取名称为d.index[0]
的列。
答案 1 :(得分:1)
这取决于你想做什么。
如果您只想要第一行,可以使用iloc访问它,请执行以下操作:
d.iloc[0]['a']
如果您希望按年度过滤数据框,则可以执行以下操作:
d.loc[d.index.year == 2018, 'a']
答案 2 :(得分:0)
d['a'][d.index[0]]
我的困惑来自这样一个事实:DataFrame
是第一列,而不是第一行,就像人们对一般多维数据结构所期望的那样。因此,为了获得价值,必须切换指数。
dataFrame[coumn][row]
感谢@Michael提示。
答案 3 :(得分:0)
首先,您必须始终了解要处理的数据类型,在这种情况下,您需要创建一个DatetimeIndex:
DatetimeIndex(['2020-08-25 11:00:00.000307403',
'2020-08-25 11:00:00.000558638',
'2020-08-25 11:00:00.002280412',
'2020-08-25 11:00:00.002440933'])
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
在DatetimeIndex内,它的每个元素都是一个时间戳:
2020-08-25 11:00:00.000307403
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
使用DatetimeIndexes时,必须按实际时间戳记('2020-08-25 11:00:00.000307403')而不是完整的timestamp变量(Timestamp('2020-08-25 11:00:00.000307403'))
所以,不要这样做:
df[Timestamp('2020-08-25 11:00:00.000307403')]
您应该这样做:
df['2020-08-25 11:00:00.000307403']
我花了两个小时才发现此错误,因为在变量中包含数据类型有点愚蠢,解决此问题的最简单方法就是将DatetimeIndex解析为字符串。
为您提供解决方案:
d[str(d.index[0]),'a']
应该工作