如何在多行中访问pandas datetime时间戳的值 - 语法?

2 投票
1 回答
1754 浏览
提问于 2025-04-21 04:56

我有一列日期,想在逻辑运算中使用这些日期的值。对于一行数据,我可以很容易地做到这一点,但我不知道怎么写语法才能查看所有行的数据。

我想找出在特定时间范围内和特定地点的所有值。

Y=x.loc[xx.timestamp[:].month<7 and xx.timestamp[:].month>2 and xx.Area == 'GBK']

但是“时间戳”这一部分不工作(我的这一行标记为“时间戳”)。所以,我在排查问题:

访问一行数据

xx.timestamp[10]
Out[291]: Timestamp('1977-02-15 00:00:00')

访问这一行的 pandas 时间戳的月份值

xx.timestamp[10].month
Out[292]: 2

访问所有行的时间戳月份值

xx.timestamp[:].month
Traceback (most recent call last):

AttributeError: 'Series' object has no attribute 'month'

我可以访问一行,但无法访问更多行。我缺少了什么呢……

1 个回答

3

Series没有month这个属性(即使它是一个日期时间的Series):

In [11]: s = pd.Series(pd.to_datetime('2014-01-01'))

In [12]: s
Out[12]:
0   2014-01-01
dtype: datetime64[ns]

你可以把这个Series包装成DatetimeIndex,这样就可以使用month属性了:

In [13]: pd.DatetimeIndex(s).month
Out[13]: array([1])

在0.15.0版本中会有一个dt访问器:

In [14]: s.dt.month  # 0.15.0+ only
Out[14]:
0    1
dtype: int64

注意:你不能用and来处理Series或numpy数组,你需要用&

x.loc[(DatetimeIndex(xx.timestamp).month < 7) & (DatetimeIndex(xx.timestamp.month) > 2) & (xx.Area == 'GBK')]

撰写回答