【问题标题】:Splitting dataframe by month on a series in Python在 Python 中的系列上按月拆分数据帧
【发布时间】:2019-04-18 18:36:35
【问题描述】:

我的数据框的每个集合的日期范围为 1-12 个月。数据如下:

     Date         AB      AK      AR      DC
  0  2005-01-01  267724 37140   152536  60004
  1  2005-02-01  214444 32710   149821  49280
  2  2005-03-01  205938 27484   141526  41345
  3  2005-04-01  99262  14562   81254   31609
  4  2005-05-01  66059  8172    50241   18705
  5  2005-06-01  33556  4880    27216   11796
  6  2005-07-01  28057  4138    20156   9126
  7  2005-08-01  25466  3892    19005   8262
  8  2005-09-01  26819  3923    18776   9480
  9  2005-10-01  60849  5942    31255   1664
.
.

日期为datetime 格式:

data_res_num.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 164 entries, 0 to 163
Data columns (total 11 columns):
Date                   164 non-null datetime64[ns]

但是当我尝试只通过某些月份(10 到 3 个月)时:

df = df.loc[(df['Date'].dt.month > 10) & (df['Date'].dt.month < 4)]

我得到一个 df 的空帧。

我认为它可能是范围,但即使我将它设置为 == 某个月份,它也会给我一个空框。

如何选择从 11 月到 3 月的范围?

【问题讨论】:

  • 错字:没有大于 10 且小于 3 的整数。
  • 就是这样。我也尝试了df = df.loc[(df['Date'].dt.month == 10) &amp; (df['Date'].dt.month == 4)],得到了相同的结果,我知道存在 10 和 4。
  • @jpp pandas 将选择满足这些列条件之一的行,它们不必同时满足......
  • @jpp,呵呵,他需要|,我的错!哈哈,真丢人。
  • 嘿@HelloToEarth,| 是OR 运算符,这意味着pandas 将选择满足任一条件的行,但是,当您使用&amp; 这是AND 运算符时,这意味着这两个条件必须同时满足。您不能同时拥有大于 10 和小于 4 的月份,也不能拥有同时等于 4 和 10 的月份。因此,您需要使用OR 运算符|。

标签: python python-3.x python-2.7 pandas dataframe


【解决方案1】:

尝试在不使用.loc的情况下进行切片:

df = df[(df['Date'].dt.month > 10) | (df['Date'].dt.month < 4)] 

【讨论】:

  • 这是不正确的。问题是错字,请参阅问题的 cmets。
猜你喜欢
  • 2020-02-01
  • 1970-01-01
  • 2020-01-18
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多